演算法提高 Torry的困惑(提高型)
阿新 • • 發佈:2019-01-10
問題描述
Torry從小喜愛數學。一天,老師告訴他,像2、3、5、7……這樣的數叫做質數。Torry突然想到一個問題,前10、100、1000、10000……個質數的乘積是多少呢?他把這個問題告訴老師。老師愣住了,一時回答不出來。於是Torry求助於會程式設計的你,請你算出前n個質數的乘積。不過,考慮到你才接觸程式設計不久,Torry只要你算出這個數模上50000的值。
輸入格式
僅包含一個正整數n,其中n<=100000。
輸出格式
輸出一行,即前n個質數的乘積模50000的值。
樣例輸入
<span style="color:#333333">1</span>
樣例輸出
2
//想了好久 沒明白為什麼一模一樣的題,提高這就過不了了呢,後來發現乘積資料範圍開小了 換成ll就好啦
#include <iostream> #include <math.h> using namespace std; const int DATA = 50000; int isPrime(long long n) { //返回1表示判斷為質數,0為非質數,在此沒有進行輸入異常檢測 float n_sqrt; if(n==2 || n==3) return 1; if(n%6!=1 && n%6!=5) return 0; n_sqrt=floor(sqrt((float)n)); for(int i=5;i<=n_sqrt;i+=6) { if(n%(i)==0 | n%(i+2)==0) return 0; } return 1; } int main() { int n, cnt = 0, i = 1; long long sum = 1; cin >> n; while(cnt < n) { while(1) { i++; if(isPrime(i)) { sum *= (i%DATA); sum %= DATA; cnt++; break; } } } cout << sum << endl; return 0; }