莫问东君诉恩怨


私信TA

用户名:Z20011212

访问量:289

签 名:

等  级
排  名 3142
经  验 2020
参赛次数 0
文章发表 2
年  龄 0
在职情况 学生
学  校 天津师范大学
专  业

  自我简介:

TA的其他文章

解题思路:从3开始逐个寻找质数并相乘,直到质数的个数等于n。实现的具体代码有详细备注

注意事项:

参考代码:

#include<iostream>

#include<cmath>

#include<vector>

using namespace std;

int n;

vector<int> vec;                //动态数组vec用于存储质数 

int main()

{

cin>>n;

vec.push_back(2);             //将第一个质数2放入vec数组中 

bool flag=true;              //用于判断数i是否能被vec数组中的数整除 

long long muti=2;           //初始成绩设为2,即为质数2 

for(int i=3;vec.size()<n;i++)                              //从i=3开始累加,直到质数个数为n个 

{

flag=true;             //每轮循环flag从true开始,一旦发现i是质数(即能被vec数组中的数整除),就将flag设为false 

if(i%2==0||(i>3&&i%3==0)||(i>5&&i%5==0)||(i>7&&i%7==0))//进行简单的剪枝 

continue;

for(int j=0;vec[j]<=sqrt(i);j++)                       

{

if(i%vec[j]==0)                     //判断数组中是否存在数可以被i整除 

{

flag=false;                     //此时i不是质数 

break;                          //退出循环 

}

}

if(flag)                                //如果flag为true,即 数组中没有数能被i整除,此时i为质数 

{

vec.push_back(i);                   //将质数i放入vec数组中 

muti=(muti%50000)*(i%50000)%50000;  //计算乘积 

}

}

cout<<muti<<endl;                           //输出最终乘积 

}


 

0.0分

0 人评分

  评论区

  • «
  • »