C加加求出1至n的和谐素数之和
时间: 2024-02-13 10:04:37 浏览: 98
好的,我来给你讲解一下如何用C++求出1至n的和谐素数之和,代码如下:
```c++
#include<bits/stdc++.h>
using namespace std;
const int maxn=1e7+10;
int vis[maxn],primes[maxn],cnt;
long long ans[maxn];
void get_primes(int n){
for(int i=2;i<=n;i++){
if(!vis[i]){
primes[++cnt]=i;
}
for(int j=1;j<=cnt&&i*primes[j]<=n;j++){
vis[i*primes[j]]=1;
if(i%primes[j]==0) break;
}
}
}
int main(){
int n;
scanf("%d",&n);
get_primes(n);
long long res=0;
for(int i=1;i<=cnt;i++){
int p=primes[i];
int q=p-1;
if(!vis[q]) res+=q;
}
printf("%lld\n",res);
return 0;
}
```
我们先定义一个`vis`数组来判断每个数是否为质数。
然后,我们定义`primes`数组来存储素数。
接着,我们定义`cnt`来记录素数的个数。
我们遍历 `[1, n]` 中的每个数,如果当前数是质数,我们直接将其加入素数数组中。
如果当前数不是质数,我们就遍历素数数组中的每个数,并将当前数与乘积的位置标记为非质数。
最后,我们遍历素数数组中的每个数,并计算其减1的数`q`是否为素数,如果是素数就将其加入结果中。
最终,我们输出结果即可。
希望这个代码对你有所帮助!
阅读全文