演算法提高 Torry的困惑(提高型) (篩選素數)
阿新 • • 發佈:2019-01-07
問題描述
Torry從小喜愛數學。一天,老師告訴他,像2、3、5、7……這樣的數叫做質數。Torry突然想到一個問題,前10、100、1000、10000……個質數的乘積是多少呢?他把這個問題告訴老師。老師愣住了,一時回答不出來。於是Torry求助於會程式設計的你,請你算出前n個質數的乘積。不過,考慮到你才接觸程式設計不久,Torry只要你算出這個數模上50000的值。
輸入格式
僅包含一個正整數n,其中n<=100000。
輸出格式
輸出一行,即前n個質數的乘積模50000的值。
樣例輸入
1
樣例輸出
2
思路:
篩選法求得素數,用long long型別儲存成績結果
程式碼:
#include<iostream> #include<algorithm> #include<math.h> #define N 10000000 using namespace std; int a[N]; void js() { int i,j; for (i=2; i<N; i++) { a[i] = i; } for (i=2; i<sqrt(N); i++) { if (a[i] != 0) { for (j=i*2; j<N; j+=i) { a[j] = 0; } } } j=1; for (i=2; i<N; i++) { if (a[i] != 0) { a[j++] = a[i]; } } } int main() { long long s=1; int n,i; js(); cin>>n; for (i=1; i<=n; i++) { s = (s*a[i]) % 50000; } cout<<s; return 0; }