用c++写2 完美素数(14分) 题目内容: 素数是指一个大于1的自然数,除了1和此整数自身外,不能被其他自然数整除的数。如果一个素数是完美的素数,当且仅当它的每一位数字之和也是一个素数。如29,本身是素数,而且2+9=11也是素数,所以它是完美素数。求[1,n]范围内完美素数的个数。
时间: 2024-03-24 10:40:56 浏览: 91
输入一个正整数,判断是不是素数(C++)
好的,下面是 C++ 代码实现:
```c++
#include <iostream>
#include <cmath>
using namespace std;
// 判断一个数是否为素数
bool is_prime(int n) {
if (n < 2) return false;
int sqrtn = sqrt(n);
for (int i = 2; i <= sqrtn; i++) {
if (n % i == 0) return false;
}
return true;
}
// 计算一个数的各位数字之和
int digit_sum(int n) {
int sum = 0;
while (n > 0) {
sum += n % 10;
n /= 10;
}
return sum;
}
int main() {
int n;
cin >> n;
int count = 0;
for (int i = 2; i <= n; i++) {
if (is_prime(i) && is_prime(digit_sum(i))) {
count++;
}
}
cout << count << endl;
return 0;
}
```
首先定义了两个函数,`is_prime()` 用于判断一个数是否为素数,`digit_sum()` 用于计算一个数的各位数字之和。
然后遍历 [1, n] 范围内的每个整数,对于每个整数,判断它是否是素数,以及它的各位数字之和是否是素数,如果都是素数,则完美素数的个数加 1。
最后输出完美素数的个数即可。
阅读全文