输入格式:
输入在一行中给出正整数n(n<20)。
输出格式:
按从小到大的顺序输出所有不超过2
n
−1的梅森数,每行一个。如果完全没有,则输出“None”。
输入样例:
6
输出样例:
3
7
31
ACcode:
#include <bits/stdc++.h>
using namespace std;
bool isPrime(int num){
if(num <= 1)
return false;
int sqrtNum = sqrt(num);
for(int i=2; i<=sqrtNum; i++){
if(num%i == 0)
return false;
}
return true;
}
bool isMersenne(int a){
double num=log(a+1)/log(2);
return num == floor(num);
//使用 floor() 函数来获取一个 double 类型的数的整数部分,然后比较整数部分和原始数是否相等。如果相等,则表示这个数是整数。
}
int main(){
int n;
cin >> n;
int flag = 0;
double mersenne = pow(2,n)-1;
for(int i=2; i<=mersenne; i++){
if(isPrime(i) && isMersenne(i)){
flag = 1;
cout << i <<endl;
}
}
if(flag == 0){
cout<<"None";
}
return 0;
}