首页 > 代码库 > 逆向思维求素数

逆向思维求素数

 1 #include <stdio.h> 2  3 int main(void) 4 { 5     const int len = 100; 6     int prime[len]; 7     for (int i=0; i<len; i++) 8         prime[i] = 1; // 1 标记这个序号数为素数,0标记为非素数 9     for (int x=2; x<len; x++)10     {11         for (int j=2; x*j<len; j++)12             prime[x*j]=0;13     }14     for (int k=2; k<len; k++)15     {16         if (prime[k]==1)17             printf("%d ", k);18     }19     printf("\n");20     return 0;21 }

看不懂代码了看这里:

假设从2到n个数,我要求其中的素数,已知2为素数。我可以假设都是素数。利用数组prime,例如序号数为4的元素,它不是素数,那prime[4]=0。

好,现在创建prime,让所有值初始化为1,然后让2逐渐增大倍数(从2倍到m倍,这个m*2<=n),这些2的倍数显然都不是素数,需要把对应角标的元素的值改为0.

然后2增加1,重复这个过程,直至n。剩下的角标对应元素值为1的,那些角标的数值就是一个素数。可以依次打印之。

逆向思维求素数