题目
题解
两种方式区别在于找素数的方式,方法一找素数是找到开方停止寻找,而方法二采用的是素数筛的方式。
方法一:
方法二:
这两种找素数的方式都可以学一下,还是比较常用的,方法一的原理比较简单,方法二的原理需要好好理解。
代码1
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 1e7+10;
int n, cnt;
ll ans=1LL;
int main()
{
cin>>n;
for(int i = 2;i < N-10;i ++) {
int flag = 0;
for(int j = 2;j <= sqrt(i);j ++) {
if(i%j == 0) {flag = 1; break;}
}
if(!flag) {
ans = ans*i%50000;
if(++cnt == n) break;
}
}
printf("%lld", ans);
}
代码2
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 1e7+10;
int n, cnt, vis[N];
ll prime[N];
ll ans=1LL;
int main()
{
cin>>n;
for(int i = 2;cnt < n;i ++) {
if(!vis[i]) prime[++cnt] = i;
for(int j = 1;j <= cnt;j ++) {
if(i*prime[j] > N-10) break;
vis[i*prime[j]] = 1;
if(i%prime[j]==0) break;
}
}
// cout <<prime[cnt]<<endl;
for(int i = 1;i <= n;i ++) ans = ans*prime[i]%50000;
printf("%lld", ans);
}