问题 G: 素数求和
时间限制: 1 Sec 内存限制: 256 MB提交: 142 解决: 30
[提交][状态][讨论版]
题目描述
输入一个自然数n,求小于等于n的素数之和
输入
输出
样例输入
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 ",sum); return 0; } /************************************************************** Problem: 1551 User: 2016207228 Language: C++ Result: 正确 Time:67 ms Memory:8896 kb ****************************************************************/