筛法--求1到100的所有素数

用筛法求出100以内的全部素数,并按每行五个数显示

我们知道一个合数可以分解了几个质数想乘,从2开始知道根号下n每次判断一个数是否为素数,如果为素数,就把所有能被这个数整除的数排除,即不是素数。

首先是一个判断素数的函数

 1 bool sushu(int x)
 2 {
 3     if (x==2)
 4     return true;
 5     for (int i = 2;i <= sqrt(x);i++)
 6     {
 7         if (x%i==0)
 8             return false;
 9     }
10     return true;
11 }

 

把能被素数整除得数排除

 1     for (int i = 2;i <= sqrt(n);i++)
 2     {
 3         if (sushu(i))
 4         {
 5             for (int j= 2;j <= n/i;j++)
 6             {
 7                 a[i*j]=false;
 8             }
 9         }
10     }

 

完整代码:

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cstring>
 4 #include <math.h>
 5 #include <algorithm>
 6 #include <iomanip>
 7 using namespace std;
 8 bool sushu(int x)
 9 {
10     if (x==2)
11     return true;
12     for (int i = 2;i <= sqrt(x);i++)
13     {
14         if (x%i==0)
15             return false;
16     }
17     return true;
18 }
19 int main()
20 {
21     int const n = 100;
22     bool a[10000];
23     memset(a,true,sizeof(a));
24     a[1]=false;
25     for (int i = 2;i <= sqrt(n);i++)
26     {
27         if (sushu(i))
28         {
29             for (int j= 2;j <= n/i;j++)
30             {
31                 a[i*j]=false;
32             }
33         }
34     }
35     int ans=0;
36     for(int i = 1;i <= n;i++)
37     {
38         if (a[i]){
39             printf ("%-5d",i);
40             ans++;
41         }
42         if (ans==5)
43         {
44             ans=0;
45             cout<<endl;
46         }
47     }
48     return 0;
49 }

 

posted @ 2019-12-05 20:14  小又又  阅读(1902)  评论(0编辑  收藏  举报