題目請參考 https://zerojudge.tw/ShowProblem?problemid=d237.
這題是要直接輸出200萬以內的所有質數的和. 求質數的方法請參考另一篇zerojudge b513. 判斷質數-商競103. 就用那篇程式不斷的求出質數直到200萬就好了. 偷偷告訴你,答案是1429…28922.😆
完整程式如下.
#include <cstdio>
#include <cstring>
#include <iostream>
#include <cmath>
#include <vector>
using namespace std;
vector <int> prime; //儲存所有質數
int main(){
prime.push_back(2);
prime.push_back(3);
long long sum=5;
for(int i=6;i<2000000;i+=6)
{
//判斷6n-1是不是質數
int p=i-1;
int SqrtP=sqrt(p);
for(int v:prime){
if(v>SqrtP){
prime.push_back(p);
sum+=p;
//printf("%d sum=%lld\n",p,sum);
break;
}
if(p%v==0){
break;
}
}
//判斷6n+1是不是質數
p=i+1;
SqrtP=sqrt(p);
for(int v:prime){
if(v>SqrtP){
prime.push_back(p);
sum+=p;
//printf("%d sum=%lld\n",p,sum);
break;
}
if(p%v==0){
break;
}
}
}
printf("%lld", sum);
}
C++