zerojudge d237. 質數合

題目請參考 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++

Comments

No comments yet. Why don’t you start the discussion?

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *