形如 2^n − 12n−1 的素数称为梅森数(Mersenne Number)。例如 2^2 − 1 = 3 、 2^3 − 1 = 7都是梅森数。
1722年,双目失明的瑞士数学大师欧拉证明了 2^{31} − 1 = 2147483647 是一个素数,堪称当时世界上“已知最大素数”的一个记录。
编写程序,对任一正整数n( n \leq 31n≤31 ),输出所有不超过 2^n − 1的梅森数。
正整数n( n≤31)
按从小到大的顺序输出所有不超过 2^n− 1的梅森数,每行一个。如果完全没有,则输出“None”。
例如 6 输出:
3 7 31
先注意换行\n的运算,再注意2^n这为了方便直接用math.h源文件。然后进行简单的素数判断就欧克了,最后注意输出形式,没就就none。
直接上代码
#include <stdio.h>
#include <math.h>
int main(int argc,char *argv[])
{ int n,s,i,z=0,j;
scanf(“%d”,&n) ;
for(i=2;i<=n;i++)
{
s=pow(2,i)-1;
for(j=2;j<sqrt(s);j++)
{
if(s%j==0)
break;
}
if(j>=sqrt(s))
{if(z!=0)
printf(“\n”);
printf(“%d”,s);
z++;}
}
if(z==0)
printf(“None”);
}
直接ac。