藍橋杯演算法訓練 Torry的困惑(基本型)
阿新 • • 發佈:2019-01-01
演算法訓練 Torry的困惑(基本型) 時間限制:1.0s 記憶體限制:512.0MB問題描述 Torry從小喜愛數學。一天,老師告訴他,像2、3、5、7……這樣的數叫做質數。Torry突然想到一個問題,前10、100、1000、10000……個質數的乘積是多少呢?他把這個問題告訴老師。老師愣住了,一時回答不出來。於是Torry求助於會程式設計的你,請你算出前n個質數的乘積。不過,考慮到你才接觸程式設計不久,Torry只要你算出這個數模上50000的值。輸入格式 僅包含一個正整數n,其中n<=100000。輸出格式 輸出一行,即前n個質數的乘積模50000的值。樣例輸入
1
樣例輸出
2
可以用埃氏篩法求解10^6以內的素數表,然後按要求進行乘積取餘運算即可。關於埃氏篩法可以檢視我的這篇部落格https://blog.csdn.net/richenyunqi/article/details/79502038c++程式碼:
#include<bits/stdc++.h> using namespace std; const int INF=1e6+5; vector<int>prime; bool flag[INF]; void findPrime(){ for(int i=2;i<INF;++i){ if(!flag[i]){ prime.push_back(i); for(int j=i+i;j<INF;j+=i) flag[j]=true; } } } int main(){ findPrime(); int N,result=1; scanf("%d",&N); for(int i=0;i<N;++i) result=(result*prime[i])%50000; printf("%d",result); return 0; }