2
2
测试样例保证 2 <= n <= 2,000,000
埃拉托斯特尼筛法(Sieve of Eratosthenes)
#include<stdio.h> #include<string.h> #include<stdlib.h> #include<math.h> #include<stack> #include<queue> #include<vector> #include<algorithm> using namespace std; int a[2000005]; int main() { int n,i,j; long long sum; scanf("%d",&n); a[1]=1; a[2]=0; for(i=2;i<=n;i++){ if(a[i]==0){ for(j=2;i*j<=n;j++){ a[i*j]=1; //筛法核心 } } } sum=0; for(i=1;i<=n;i++){ if(!a[i]){ sum+=i; } } printf("%lld\n",sum); return 0; } /************************************************************** Problem: 1551 User: 2016207228 Language: C++ Result: 正确 Time:67 ms Memory:8896 kb ****************************************************************/
原文:http://www.cnblogs.com/yzm10/p/7257932.html