形如2 n −1的素数称为梅森数(Mersenne Number)。例如2 2 −1=3、2 3 −1=7都是梅森数。1722年,双目失明的瑞士数学大师欧拉证明了2 31 −1=2147483647是一个素数,堪称当时世界上“已知最大素数”的一个记录。 本题要求编写程序,对任一正整数n(n<20),输出所有不超过2 n −1的梅森数。
输入格式:
输入在一行中给出正整数n(n<20)。
输出格式:
按从小到大的顺序输出所有不超过2n −1的梅森数,每行一个。如果完全没有,则输出“None”。
输入样例:
6
输出样例:
3
7
31
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<cmath>
using namespace std;
bool juge(int num);
int main(){
int n;
cin>>n;
// for(int i=1;i<=(pow(2,n)-1);i++){
// bool j = juge(i);
// if(j&&(pow(2,n)-1)==i){
// cout<<i<<endl;
// }
// }
bool ok=false;
for(int i=2;i<=n;i++){
if(juge((pow(2,i)-1))){
cout<<(pow(2,i)-1)<<endl;
ok=true;
}
}
if(!ok)cout<<"None"<<endl;
return 0;
}
bool juge(int num){
for(int i=2;i<=sqrt(num);i++){
if(num%i==0){
return false;
}
}
return true;
}