http://lx.lanqiao.org/problem.page?gpid=T129
算法训练 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
分析:
先打表,后遍历。
AC代码:
1 #include<stdio.h> 2 #include<string.h> 3 4 const int INF = 1300000; 5 const int mod = 50000; 6 int a[INF]; 7 8 int main() 9 { 10 int n , i , j , k ; 11 scanf("%d",&n); 12 memset(a , 0 , sizeof(a)); 13 a[0] = a[1] = 1; 14 for(i = 0;i < INF;i ++) 15 { 16 if(a[i]) 17 continue; 18 for(j = i + i;j < INF;j += i) 19 a[j] = 1; 20 } 21 __int64 ans = 1; 22 for(i = 0 , j = 0;i < INF && j < n;i ++) 23 if(a[i] == 0) 24 { 25 ans = ((ans % mod) * (i % mod)) % mod; 26 j ++; 27 } 28 printf("%I64d ",ans); 29 return 0; 30 }