逆向思维求素数

 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的,那些角标的数值就是一个素数。可以依次打印之。

posted @ 2014-12-23 16:28  谭哥  阅读(113)  评论(0编辑  收藏  举报