算法训练 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
用素数筛选法打表就好了
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
int pri[100010];
bool isprime(int a){
for(int i = 2; i < a; i++){
if(a%i == 0)
return false;
}
return true;
}
void prime(){
for(int i = 0; i < 100010; i++)
pri[i] = 1;
int t = sqrt(100010);
for(int i = 2; i <= t; i++){
if(!isprime(i))
pri[i] = 0;
for(int j = i*2; j <= 100010; j+=i)
pri[j] = 0;
}
}
int main()
{
prime();
int n;
while(scanf("%d", &n)!=EOF){
int cnt = 0, res = 1;
for(int i = 2; i < 100010; i++){
if(pri[i] == 1){
cnt++;
// printf("%d ", i);
res = (res*i)%50000;
}
if(cnt == n)
break;
}
printf("%d\n", res);
}
return 0;
}