1. 程式人生 > >藍橋杯演算法訓練 Torry的困惑(基本型)

藍橋杯演算法訓練 Torry的困惑(基本型)

演算法訓練 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/79502038

c++程式碼:

#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;
}