形如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)。
输出格式: 按从小到大的顺序输出所有不超过2 n −1的梅森数,每行一个。如果完全没有,则输出“None”。
输入样例: 6 输出样例: 3 7 31
#include<stdio.h> #include<math.h> int isPrime(int x); int main() { int n,cnt=0; scanf("%d",&n); for(int i=2;i<=n;i++){ int num=pow(2,i)-1; if(isPrime(num)){ printf("%d\n",num); cnt++; } } if(cnt==0) printf("None\n"); return 0; } int isPrime(int x){ int isPrime=1; if(x%2==0&&x!=2) isPrime=0; else { for(int i=3;i<=sqrt(x);i+=2){ if(x%i==0){ isPrime=0; break; } } } return isPrime; }