素数是指一个大于1的自然数,除了1和此整数自身外,不能被其他自然数整除的数。如果一个素数是完美的素数,当且仅当它的每一位数字之和也是一个素数。如29,本身是素数,而且2+9 = 11也是素数,所以它是完美素数。求[1,n]范围内完美素数的个数。c++
时间: 2024-03-24 14:37:37 浏览: 117
一定范围内素数获取,c程序版的。
以下是C++代码实现:
```cpp
#include <iostream>
#include <cmath>
using namespace std;
// 判断一个数是否为素数
bool isPrime(int n)
{
if (n <= 1) return false;
for (int i = 2; i <= sqrt(n); i++) {
if (n % i == 0) return false;
}
return true;
}
// 计算一个数的各个位数字之和
int digitSum(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 (isPrime(i) && isPrime(digitSum(i))) {
count++;
}
}
cout << count << endl;
return 0;
}
```
具体思路是:遍历[2,n]范围内的每个数字,判断它是否是素数,如果是,再计算它的各个位数字之和,判断它的各个位数字之和是否也是素数,如果是,则计数器加一。最后输出计数器的值即可。
阅读全文