形如 2^n-1 的素数称为 梅森尼数(Mersenne Prime)
例如 2²-1=3 , 2³-1=7 都是梅森尼数;
- 1722年,双目失明的瑞士数学大师欧拉证明了 2^31-1=2147483647 是一个素数,堪称当时世界上“已知最大素数”的一个记录;
试求出指数n<50的所有梅森尼数;
1.说明:
设置指数n循环,输入循环上限指数n(n>2),循环体中通过累乘t=t*2得t=2^n;
根据梅森尼数的构造形式,对m=t-1应用试商法实施素数判别,若m为素数,即为所寻求的梅森尼数,进行打印输出;
2.程序设计:
#include<stdio.h>
#include<math.h>
int main()
{
double t,m;
int j,x,s,n,a;
s=0;
t=2;
printf("输入循环上限指数n(n>2):");
scanf("%d",&n);
a=n;
for(n=2;n<=a;n++)
{
t=t*2; /*累乘量t为2^n*/
m=t-1;
x=0;
for(j=3;j<sqrt(m)+1;j+=2) /*试商法判别m是否为素数*/
if(fmod(m,j)==0)
{
x=1;
break;
}
if(x==0) /*输出所求得的素数*/
{
s+=1;
printf("2^%d-1=%0.f\n",n,m);
}
}
printf("指数n于[2,%d]中梅森尼数共有%d个。",a,s);
}
3.程序运行示例及其注意事项:
输入循环上限指数n(n>2):50
2^2-1=3
2^3-1=7
2^5-1=31
2^7-1=127
2^13-1=8191
2^17-1=131071
2^19-1=524287
2^31-1=2147483647
指数n于[2,50]中梅森尼数共有8个。
注意:若2^n-1为梅森尼数,则n必为素数(以上程序运行结果可验证这一点),若需要求更大的梅森尼数,指数n可限定为一素数,以减少搜索量;
了解梅森尼数
- 概述:
梅森素数,(MersennePrimes),17