梅森尼数

形如 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

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值