梅森数

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

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

输入格式:

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

输出格式:

按从小到大的顺序输出所有不超过2n​​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 }

 

 
posted @ 2019-08-20 22:24 柠檬小七 阅读(...) 评论(...) 编辑 收藏