原题 华中科技大学考研机试题 3614. 梅森素数
#include <iostream>
#include <cmath>
using namespace std;
const int N = 20;
int primes[N], cnt; // primes[]存素数
int M[N]; // 存梅森数
// 判断素数
bool is_prime(int x) {
if (x < 2) {
return false;
}
for (int i = 2; i <= x / i; i ++ ) {
if (x % i == 0) {
return false;
}
}
return true;
}
// 获取梅森素数
void get_meisen() {
for (int i = 2; i <= 31; i++) {
if (is_prime(i) && is_prime(pow(2, i) - 1)) {
primes[cnt] = i;
M[cnt++] = pow(2, i) - 1;
}
}
}
int main() {
get_meisen();
int n;
cin >> n;
for (int i = 0; i < cnt; i++) {
if (M[i] <= n) {
cout << "M(" << primes[i] << ")=" << M[i] << endl;
}
}
return 0;
}
参考: 梅森数及梅森素数