题目描述:
问题描述 Torry从小喜爱数学。一天,老师告诉他,像2、3、5、7……这样的数叫做质数。Torry突然想到一个问题,前10、100、1000、10000……个质数的乘积是多少呢?他把这个问题告诉老师。老师愣住了,一时回答不出来。于是Torry求助于会编程的你,请你算出前n个质数的乘积。不过,考虑到你才接触编程不久,Torry只要你算出这个数模上50000的值。 输入格式 仅包含一个正整数n,其中n<=100000。 输出格式 输出一行,即前n个质数的乘积模50000的值。 样例输入 1 样例输出 2
先上代码:
1 #include <stdio.h> 2 #include <string.h> 3 #define LEN 100000 4 using namespace std; 5 6 int main(void) 7 { 8 int n,res=1; 9 int num[LEN+1]; 10 memset(num,0,sizeof(num)); 11 12 scanf("%d",&n); 13 14 for (int i=2 ; i<LEN ; i ++) 15 { 16 if (num[i] == 0) 17 for (int j=i ; i*j<LEN ; j++) 18 num[i*j] = 1; //非素数的置为1 19 20 if (num[i] == 0) 21 { 22 n --; 23 res = (res*i)%50000; 24 if (n==0) 25 break; 26 } 27 } 28 29 printf("%d",res); 30 return 0; 31 }
解题思路:
1.将素数的值置为0,非素数的值置为1
2.每检测到一个素数即将其累乘取模,n减1