东华大学OJ质数的乘积
题目描述:Torry从小喜爱数学。一天,老师告诉他,像2、3、5、7……这样的数叫做质数。Torry突然想到一个问题,前10、100、1000、10000……个质数的乘积是多少呢?他把这个问题告诉老师。老师愣住了,一时回答不出来。于是Torry求助于会编程的你,请你算出前n个质数的乘积。不过,考虑到你才接触编程不久,Torry只要你算出这个数模上50000的值。
输入说明:仅包含一个正整数n,其中n<=100000。
输出说明:输出一行,即前n个质数的乘积模50000的值。
输入范例:3
输出范例:30
自己出现的错误:
- 读题不仔细!(题目要求输出%50000后的结果)
- 没考虑到溢出!以为long long就万事大吉了。
学习产出:
- 收获就是读题仔细吧。
- 以前处理这种大数问题都是用数组的。这次连续相乘且结果可以不完全输出。所以想到了在过程中就省去高于所需位的不必要数字。
- 仅此记录,鞭策自己学习。
#include <iostream>
#include <bits/stdc++.h>
#include <cmath>
using namespace std;
int main()
{
int n;
scanf("%d",&n);
if(n==0){
printf("0\n");
exit(0);
}
else if(n==1){
printf("2\n");
exit(0);
}
else if(n==2){
printf("6\n");
exit(0);
}
long long sum=6;
int time;
int i;
for(time =3,i=5;time<=n;i++){
bool flag =1;
for(int j=2;j<=sqrt(i);j++){
if(i % j == 0 && i != j){
flag =0;
break;
}
}
if(flag){
time++;
sum*=i;
sum%=100000;
}
}
cout<<(sum%50000)<<endl;
return 0;
}
//题外话:真的真的!不要头脑昏昏打OJ!