问题描述
Torry从小喜爱数学。一天,老师告诉他,像2、3、5、7……这样的数叫做质数。Torry突然想到一个问题,前10、100、1000、10000……个质数的乘积是多少呢?他把这个问题告诉老师。老师愣住了,一时回答不出来。于是Torry求助于会编程的你,请你算出前n个质数的乘积。不过,考虑到你才接触编程不久,Torry只要你算出这个数模上50000的值。
输入格式
仅包含一个正整数n,其中n<=100000。
输出格式
输出一行,即前n个质数的乘积模50000的值。

  1. #include <iostream>
  2. #include <vector>
  3. using namespace std;
  4. int main(){
  5. vector<int> v;
  6. int n;
  7. cin>>n;
  8. v.push_back(2);
  9. int ans = 2;
  10. int pos = 0;
  11. int i = 3; //从3开始+2+2地找素数
  12. while(v.size() < n){
  13. pos = 0;
  14. while(v[pos] * v[pos] <= i){ //i变为质数为止不停循环
  15. if(i % v[pos] == 0){
  16. i += 2;
  17. pos = 0;
  18. }else{
  19. pos++; //欧拉筛法
  20. }
  21. }
  22. v.push_back(i);
  23. ans = ans * i;
  24. ans = ans % 50000;
  25. i += 2;
  26. }
  27. cout<<ans;
  28. }

笔记:

  • 其中的while循环写的好,参考:CSDN