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

藍橋杯 演算法訓練 ALGO-51 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

分析:本題求前n個質數的乘積模,自然要取出前n個質數進行累乘取模,所以從2開始++遍歷即可。
思路:由於對50000取模,假設恰好是49999,而 49999 49999 49999*49999 的結果是超過int範圍的,所以結果應該用long long儲存。

#include <iostream>
using namespace std;

bool zhishu(int n)
{
	for(int i = 2; i * i <= n; i++)
		if(n % i == 0)
			return false;
	return true;
}

int main()
{
	int n,count = 0;
	long long res = 1;
	
	cin >> n;
	
	for(int i = 2;; i++)
	{
		if(count == n)
			break;
		if(zhishu(i))
		{
			res = (res * (i % 50000)) % 50000;
			count++;
		}
	}
	
	cout << res << endl;
	
	return 0;
}