时间限制: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#include#include#includeusing namespace std;int pri[100010];bool isprime(int a){ for(int i = 2; 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;}