首页 > 其他 > 详细

梅森数

时间:2019-08-21 00:28:44      阅读:334      评论:0      收藏:0      [点我收藏+]

形如2?n??1的素数称为梅森数(Mersenne Number)。例如2?2??1=3、2?3??1=7都是梅森数。1722年,双目失明的瑞士数学大师欧拉证明了1是一个素数,堪称当时世界上“已知最大素数”的一个记录。

本题要求编写程序,对任一正整数n(0),输出所有不超过2?n??1的梅森数。

输入格式:

输入在一行中给出正整数n(0)。

输出格式:

按从小到大的顺序输出所有不超过2?n??1的梅森数,每行一个。如果完全没有,则输出“None”。

输入样例:

6

输出样例:

3
7
31
 1 #include<stdio.h>
 2 int main()
 3 {    
 4     int ncf(int n);
 5     int i,j,n,sum,pd,jishu;//定义判断变量
 6     jishu=0;//初始化计数值等于0
 7     scanf("%d",&n);//输入n<20的数
 8     for(i=1;i<=n;i++)//开始循环,共运行n次,注意:因为n次方从1开始,所以i从1开始
 9     {
10         pd=1;//判断=1
11         sum=ncf(i);//计算2^n-1的值;
12                 for(j=2;j<sum;j++)
13             {
14                 if(sum%j==0)//能除尽则不是素数
15                 {
16                     pd=0;//能除尽判断=0
17                     break;//记录pd值=0并跳出循环
18                 }
19             }
20             if(pd==1)//如果判断值=1;即不能被整除,说明是素数
21             {    
22                 if(sum>2)//素数大于2
23                 {
24                     printf("%d\n",sum);//输出素数    
25                     jishu++;//计数器加一
26                 }
27             }
28     }
29     if(jishu==0)//如果计数器等于0,则说明没有符合条件的素数
30     {
31         printf("None\n");//输出NONE
32     }
33 }
34 
35 
36 
37 //以下为计算n次方-1的函数
38 int ncf(int n)
39 {
40     int k,ss,su;
41     ss=2;
42     su=2;
43     if(n==0)
44     {
45         su=0;
46     }else if(n==1)
47     {
48         su=1;
49     }else
50     {
51         for(k=2;k<=n;k++)
52         {
53             su=su*ss;
54         }
55             su=su-1;
56     }
57     
58     return su;
59 }

 

 

梅森数

原文:https://www.cnblogs.com/lemon7/p/11386065.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!