nyoj 快速查找素数

View Code
 1 #include<stdio.h>
 2 #include<string.h>
 3 int prime[2000010];
 4 void puan_prime()
 5 {
 6     
 7     for(int i=2;i<=2000010;i++)
 8     {
 9         if(!prime[i])
10         {
11             for(int j=i+i;j<=2000010;j+=i)
12             prime[j]=1;
13         }
14     }
15 }
16 int main()
17 {
18     int n;
19     puan_prime();
20     while(~scanf("%d",&n),n)
21     {
22         printf("2");
23         for(int i=3;i<=n;i++)
24         if(prime[i]==0)
25         printf(" %d",i);
26         printf("\n");
27     }
28 }
View Code
 1 #include<stdio.h>
 2 #include<string.h>
 3 int prim[2000010];
 4 int pos[2000010];
 5 
 6 void puan_prime()
 7 {
 8     int num=0;
 9     for(int i=2;i<=2000010;i++)
10     {
11         if(!prim[i])
12         {
13             num++;
14             pos[num]=i;
15         }
16         for(int j=1;j<=num&&i*pos[j]<=2000010;j++)
17         {
18             prim[i*pos[j]]=1;
19             //if(i%pos[j]) break;
20         }
21     }
22 }
23 int main()
24 {
25     int n;
26     puan_prime();
27     while(~scanf("%d",&n),n)
28     {
29         printf("%d",pos[1]);
30         for(int i=2;pos[i]<=n;i++)
31         printf(" %d",pos[i]);
32         printf("\n");
33     }
34     
35 }
原文地址:https://www.cnblogs.com/1114250779boke/p/2654623.html