C加加求出1至n的和谐素数之和,不用数组
时间: 2024-02-13 10:04:37 浏览: 41
好的,下面给出不使用数组的C++代码来求出1至n的和谐素数之和:
```c++
#include<bits/stdc++.h>
using namespace std;
bool is_prime(int n) {
if(n<=1) return false;
for(int i=2;i*i<=n;i++) {
if(n%i==0) return false;
}
return true;
}
int main() {
int n;
scanf("%d",&n);
int res=0;
for(int i=2;i<=n;i++) {
if(is_prime(i)) {
int q=i-1;
if(is_prime(q)) {
res+=q;
}
}
}
printf("%d\n",res);
return 0;
}
```
我们定义一个函数`is_prime`来判断一个数是否为素数。
然后,我们遍历 `[2, n]` 中的每个数,如果当前数是素数,我们就计算其减1的数`q`是否为素数,如果是素数就将其加入结果中。
最终,我们输出结果即可。
希望这个代码对你有所帮助!
相关问题
C加加求出1至n的和谐素数之和
好的,我来给你讲解一下如何用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`是否为素数,如果是素数就将其加入结果中。
最终,我们输出结果即可。
希望这个代码对你有所帮助!
使用C语言求出1~n之间的所有素数之和
好的,我可以为您提供使用C语言求出1~n之间的所有素数之和的代码。
以下是使用C语言求出1~n之间的所有素数之和的代码:
```c
#include <stdio.h>
int is_prime(int num);
int main() {
int n, i, sum = 0;
printf("Enter a positive integer n: ");
scanf("%d", &n);
for (i = 2; i <= n; i++) {
if (is_prime(i))
sum += i;
}
printf("The sum of primes between 1 and %d is %d\n", n, sum);
return 0;
}
int is_prime(int num) {
int i;
if (num < 2)
return 0;
for (i = 2; i*i <= num; i++) {
if (num % i == 0)
return 0;
}
return 1;
}
```
其中,`is_prime`函数用于判断一个数是否为素数,如果是,则返回1,否则返回0。在`main`函数中,首先要求用户输入一个正整数n,然后使用循环遍历1~n之间的所有数,对于每个数,如果它是素数,则累加到`sum`变量中。最后输出1~n之间的所有素数之和。
希望能帮助到您!