1. 程式人生 > >演算法提高 Torry的困惑(提高型)

演算法提高 Torry的困惑(提高型)

問題描述

  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;

}