问题描述
Torry从小喜爱数学。一天,老师告诉他,像2、3、5、7……这样的数叫做质数。Torry突然想到一个问题,前10、100、1000、10000……个质数的乘积是多少呢?他把这个问题告诉老师。老师愣住了,一时回答不出来。于是Torry求助于会编程的你,请你算出前n个质数的乘积。不过,考虑到你才接触编程不久,Torry只要你算出这个数模上50000的值。
输入格式
仅包含一个正整数n,其中n<=100000。
输出格式
输出一行,即前n个质数的乘积模50000的值。
#include <iostream>#include <vector>using namespace std;int main(){vector<int> v;int n;cin>>n;v.push_back(2);int ans = 2;int pos = 0;int i = 3; //从3开始+2+2地找素数while(v.size() < n){pos = 0;while(v[pos] * v[pos] <= i){ //i变为质数为止不停循环if(i % v[pos] == 0){i += 2;pos = 0;}else{pos++; //欧拉筛法}}v.push_back(i);ans = ans * i;ans = ans % 50000;i += 2;}cout<<ans;}
笔记:
- 其中的while循环写的好,参考:CSDN
