逆向思维求素数
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 標(biāo)記這個(gè)序號(hào)數(shù)為素?cái)?shù),0標(biāo)記為非素?cái)?shù)
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 }
看不懂代碼了看這里:
假設(shè)從2到n個(gè)數(shù),我要求其中的素?cái)?shù),已知2為素?cái)?shù)。我可以假設(shè)都是素?cái)?shù)。利用數(shù)組prime,例如序號(hào)數(shù)為4的元素,它不是素?cái)?shù),那prime[4]=0。
好,現(xiàn)在創(chuàng)建prime,讓所有值初始化為1,然后讓2逐漸增大倍數(shù)(從2倍到m倍,這個(gè)m*2<=n),這些2的倍數(shù)顯然都不是素?cái)?shù),需要把對(duì)應(yīng)角標(biāo)的元素的值改為0.
然后2增加1,重復(fù)這個(gè)過程,直至n。剩下的角標(biāo)對(duì)應(yīng)元素值為1的,那些角標(biāo)的數(shù)值就是一個(gè)素?cái)?shù)。可以依次打印之。
轉(zhuǎn)載于:https://www.cnblogs.com/omnipotent/p/4180393.html
總結(jié)
- 上一篇: ABAP中创建动态内表的三种方法(转载)
- 下一篇: 13.程序集篇