问题描述

梅森数(Mersenne Prime)指的是形如2n-1的正整数,其中指数n是素数,即为Mn。如果一个梅森数是素数,则称其为梅森素数。例如22-1=3、23-1=7都是梅森素数。

当n=2,3,5,7时,Mn 都是素数,但n=11时,Mn=M11=211-1=2047=23X89,显然不是梅森素数。

1722年,瑞士数学大师欧拉证明了231-1=2147483647是一个素数,它共有10位数,成为当时世界上已知的最大素数。

迄今为止,人类仅发现了47个梅森素数。梅森素数历来都是数论研究中的一项重要内容,也是当今科学探索中的热点和难点问题。

试求出指数n<20的所有梅森素数。

问题分析

要编程求解的问题是找出指数n<20的所有梅森素数。根据梅森素数的定义,我们可以先求出n<20的所有梅森数,再逐一判断这些数是否为素数。如果是素数,则表示该数为梅森素数,打印输出即可;否则不是梅森素数。

算法设计

要求出n<20的所有梅森数,因此在本题的算法设计中需要釆用循环结构。

设变量mp存储梅森数,整数i表示指数,其取值从2〜19,i每变化一次,都相应的计算出一个梅森数,存放在mp中。对每次计算得到的当前mp值,都调用函数prime()进行判断。

在判断mp是否为素数时,可以定义一个函数prime(),每次都将mp的当前值作为实参传递给函数prime(),并判断是否为素数。如果n为素数,则prime()函数返回值为1,否则prime()函数返回值为0。

若prime()函数返回值为1,则当前mp为梅森素数,应该将其输出;若prime()函数返回值为0,则当前mp不是梅森素数。

程序流程图:

下面是完整的代码:

​#include

#include

int prime(int n)

{

int i;

long k;

k=sqrt(n)+1;

for(i=2; i<=k; i++)

if(n%i == 0)

return 0;

return 1;

}

int main()

{

int mp, n=0, i;

printf("Mersenne Prime:\n");

for(i=2; i<=20; i++)

{

mp=pow(2,i)-1;

if( prime(mp) )

{

n++;

printf("M(%d)=%d", i, mp);

printf("\n");

}

}

printf("the number of Mersenne Prime less than 20 is:%d\n", n);

return 0;

}

运行结果:

Mersenne Prime:

M(2)=3

M(3)=7

M(5)=31

M(7)=127

M(13)=8191

M(17)=131071

M(19)=524287

the number of Mersenne Prime less than 20 is:7

java梅森素数,C语言求梅森素数代码及解析相关推荐

  1. java农夫过河_C语言实现农夫过河代码及解析

    问题描述 一个农夫在河边带了一只狼.一只羊和一颗白菜,他需要把这三样东西用船带到河的对岸.然而,这艘船只能容下农夫本人和另外一样东西.如果农夫不在场的话,狼会吃掉羊,羊也会吃掉白菜.请编程为农夫解决这 ...

  2. linux求最大公约数视频,C语言求最大公约数代码及解析

    问题描述 从键盘输入两个整数,求任意两个正整数的最大公约数(GCD). 最大公因数,也称最大公约数.最大公因子,指两个或多个整数共有约数中最大的一个.a,b的最大公约数记为(a,b),同样的,a,b, ...

  3. 水仙花数c语言程序解析,C语言求水仙花数代码解析

    原标题:C语言求水仙花数代码解析 水仙花数 "水仙花数"又称为"阿姆斯特朗数".如果一个n(n≥3)位数的各位数字的n次幂之和等于该数本身,则该数称为" ...

  4. 真分数c语言,C语言列出真分数序列代码及解析

    原标题:C语言列出真分数序列代码及解析 按递增顺序依次列出所有分母为60,分子小于60的最简分数. 分子.分母只有公因数1的分数叫做最简分数或者说分子和分母是互质数的分数,叫做最简分数,又称既约分数, ...

  5. 判断魔方阵c语言程序设计_C语言实现魔方阵代码及解析

    原标题:C语言实现魔方阵代码及解析 问题描述 编写程序,实现如下表所示的5-魔方阵. 17 24 1 8 15 23 5 7 14 16 4 6 13 20 22 10 12 19 21 3 11 1 ...

  6. java求1000以内的回文素数_C语言求回文素数

    任意的整数,当从左向右读与从右向左读是相同的,且为素数时,称为回文素数.求 1000 以内的所有回文素数. 算法思想 实例的重点是判断一个数是否是回文素数.要输出 1000 以内的所有回文素数,首先应 ...

  7. c语言用数组存放100以内素数,c语言求素数(c语言输出100以内素数)

    #include void main() { int a,b,c,d,sum; scanf("%d",&a); sum=0; for(d=3;d { b=. #include#include ...

  8. c语言程序找出500以内的所有素数,c语言求出给定范围内的所有质数

    程序功能: 输入一个整数,要求打印出这个整数以内的所有质数. 程序示例: #include #include #include bool IsPrime(int x) { bool bResult = ...

  9. JAVA、PHP身份证、统一社会信用代码算法解析验证

    JAVA.PHP身份证算法解析验证 JAVA身份证号算法解析验证(待更新) JAVA统一社会信用代码算法解析验证(待更新) PHP统一社会信用代码算法解析验证 JAVA.PHP身份证算法解析: 其实上 ...

最新文章

  1. Linux KVM虚拟网络的桥接
  2. oracle:connect by start
  3. javascript类型注意事项
  4. Redis主从配置和集群配置
  5. linux pap认证,配置PPP PAP 认证
  6. 为什么同样是读书,有人能让自己的收益提高50倍,而你只能成为文艺的中年大叔?
  7. ARM版Win11系统(intel版Win10/11系统)
  8. Tomcat部署到CentOS7
  9. VC2005 运行库解析
  10. matlab数控加工,关于MATLAB复杂型面数控加工编程.pdf
  11. Python初级项目之随机漫步的Matplotlib实现
  12. 横河变送器EJA530E-JAS4N-017NN选型参考
  13. 选购笔记本要看清液晶屏幕及主流技术
  14. 直接插入排序顺序结构
  15. 水箱建模最小二乘法_大气VOCs在线监测系统评估工作指南(二)
  16. nginx的启动,停止,重启命令(linux)
  17. 计算机毕业设计(70)php小程序毕设作品之干洗店洗衣小程序系统
  18. win11恢复旧版右键菜单
  19. mysql 用大于等于代替大于_mysql使用详解
  20. 微服务与Spring Cloud简介

热门文章

  1. [单片机框架] [app_led] 利用软定时器实现闪烁和呼吸等灯光模式
  2. 简述REST与RESTFUL--简单明了一看就懂
  3. Command.CreateParameter 参数说明
  4. ZigBee无线通讯
  5. 二阶振荡衰减 matlab,二阶系统的不同阻尼系数时单位阶跃响应时域分析
  6. DNN二手车价格预测完整代码
  7. 代码编译时光标闪烁的两种方式
  8. 蔻诗曼嘉化妆品20KV变配电工程电力监控系统的设计与应用
  9. Piecewise classifier mappings:Learning fine-grained learners for novel categories with few examples
  10. 明解C语言示例代码5-1 数组