梅森數


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

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM