求完美素数
时间: 2024-02-19 13:58:07 浏览: 68
完美素数是指既是素数又是2的幂次方减1的数,例如3、7、31等。求完美素数可以使用暴力枚举的方法,即先枚举所有素数,然后判断是否是2的幂次方减1,具体代码如下:
```cpp
#include <iostream>
#include <cmath>
using namespace std;
bool is_prime(int n) {
if (n <= 1) {
return false;
}
int sqr = sqrt(n);
for (int i = 2; i <= sqr; i++) {
if (n % i == 0) {
return false;
}
}
return true;
}
bool is_perfect(int n) {
int m = log2(n + 1); // 计算n+1的对数
return (1 << m) - 1 == n && is_prime(n); // 判断是否是2的幂次方减1,并且是素数
}
int main() {
int n;
cout << "请输入要求的完美素数范围上限:";
cin >> n;
for (int i = 2; i <= n; i++) {
if (is_perfect(i)) {
cout << i << " ";
}
}
cout << endl;
return 0;
}
```
在上面的代码中,is_prime函数用于判断一个数是否是素数,is_perfect函数用于判断一个数是否是完美素数,log2函数用于计算一个数的对数,<<运算符用于计算2的幂次方。
阅读全文