码迷,mamicode.com
首页 > 其他好文 > 详细

逆向思维求素数

时间:2014-12-23 16:57:34      阅读:190      评论:0      收藏:0      [点我收藏+]

标签:

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

逆向思维求素数

标签:

原文地址:http://www.cnblogs.com/omnipotent/p/4180393.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!