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

演算法提高 Torry的困惑(提高型) (篩選素數)

問題描述   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;
}