筛法求素数加强版
题目链接http://openoj.awaysoft.com/JudgeOnline/problem.php?id=2010
如果直接循环判断,无疑必定超时,所以此题的关键就是进行预处理操作,代码如下:
1 #include<stdio.h> 2 #include<math.h> 3 bool p[1000001]; 4 long long q[1000001]; //VC中用__int64定义 , %I64d 输出 5 void prime() //预处理 6 { 7 long long i,j; 8 p[1]=1; 9 for(i=2;i<1000001;i++) 10 for(j=i*2;j<1000001;j+=i) 11 if(p[j]==0) 12 p[j]=1; 13 for(i=1;i<1000001;i++) 14 { 15 if(p[i]==1) 16 q[i]=q[i-1]; 17 else 18 q[i]=q[i-1]+(long long )i; 19 } 20 } 21 int main() 22 { 23 // freopen("in.txt","r",stdin); 24 // freopen("out.txt","w",stdout); 25 int n,x; 26 prime(); 27 scanf("%d",&x); 28 while(x--) 29 { 30 scanf("%d",&n); 31 printf("%lld\n",q[n]); 32 } 33 return 0; 34 }