C語言實現(xiàn)求梅森素數(shù)的代碼與解析
問題描述
梅森數(shù)(Mersenne Prime)指的是形如2n-1的正整數(shù),其中指數(shù)n是素數(shù),即為Mn。如果一個梅森數(shù)是素數(shù),則稱其為梅森素數(shù)。例如22-1=3、23-1=7都是梅森素數(shù)。
當n=2,3,5,7時,Mn 都是素數(shù),但n=11時,Mn=M11=211-1=2047=23X89,顯然不是梅森素數(shù)。
1722年,瑞士數(shù)學大師歐拉證明了231-1=2147483647是一個素數(shù),它共有10位數(shù),成為當時世界上已知的最大素數(shù)。
迄今為止,人類僅發(fā)現(xiàn)了47個梅森素數(shù)。梅森素數(shù)歷來都是數(shù)論研究中的一項重要內(nèi)容,也是當今科學探索中的熱點和難點問題。
試求出指數(shù)n<20的所有梅森素數(shù)。
問題分析
要編程求解的問題是找出指數(shù)n<20的所有梅森素數(shù)。根據(jù)梅森素數(shù)的定義,我們可以先求出n<20的所有梅森數(shù),再逐一判斷這些數(shù)是否為素數(shù)。如果是素數(shù),則表示該數(shù)為梅森素數(shù),打印輸出即可;否則不是梅森素數(shù)。
算法設計
要求出n<20的所有梅森數(shù),因此在本題的算法設計中需要釆用循環(huán)結(jié)構(gòu)。
設變量mp存儲梅森數(shù),整數(shù)i表示指數(shù),其取值從2〜19,i每變化一次,都相應的計算出一個梅森數(shù),存放在mp中。對每次計算得到的當前mp值,都調(diào)用函數(shù)prime()進行判斷。
在判斷mp是否為素數(shù)時,可以定義一個函數(shù)prime(),每次都將mp的當前值作為實參傳遞給函數(shù)prime(),并判斷是否為素數(shù)。如果n為素數(shù),則prime()函數(shù)返回值為1,否則prime()函數(shù)返回值為0。
若prime()函數(shù)返回值為1,則當前mp為梅森素數(shù),應該將其輸出;若prime()函數(shù)返回值為0,則當前mp不是梅森素數(shù)。
程序流程圖:
下面是完整的代碼:
#include <math.h> #include <stdio.h> 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; }
運行結(jié)果:
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
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對我們的支持。
欄 目:C語言
下一篇:詳解C++調(diào)用Python腳本中的函數(shù)的實例代碼
本文標題:C語言實現(xiàn)求梅森素數(shù)的代碼與解析
本文地址:http://mengdiqiu.com.cn/a1/Cyuyan/644.html
您可能感興趣的文章
- 04-02c語言函數(shù)調(diào)用后清空內(nèi)存 c語言調(diào)用函數(shù)刪除字符
- 04-02c語言的正則匹配函數(shù) c語言正則表達式函數(shù)庫
- 04-02func函數(shù)+在C語言 func函數(shù)在c語言中
- 04-02c語言中對數(shù)函數(shù)的表達式 c語言中對數(shù)怎么表達
- 04-02c語言用函數(shù)寫分段 用c語言表示分段函數(shù)
- 04-02c語言編寫函數(shù)冒泡排序 c語言冒泡排序法函數(shù)
- 04-02c語言沒有round函數(shù) round c語言
- 04-02c語言分段函數(shù)怎么求 用c語言求分段函數(shù)
- 04-02C語言中怎么打出三角函數(shù) c語言中怎么打出三角函數(shù)的值
- 04-02c語言調(diào)用函數(shù)求fibo C語言調(diào)用函數(shù)求階乘


閱讀排行
本欄相關
- 04-02c語言函數(shù)調(diào)用后清空內(nèi)存 c語言調(diào)用
- 04-02func函數(shù)+在C語言 func函數(shù)在c語言中
- 04-02c語言的正則匹配函數(shù) c語言正則表達
- 04-02c語言用函數(shù)寫分段 用c語言表示分段
- 04-02c語言中對數(shù)函數(shù)的表達式 c語言中對
- 04-02c語言編寫函數(shù)冒泡排序 c語言冒泡排
- 04-02c語言沒有round函數(shù) round c語言
- 04-02c語言分段函數(shù)怎么求 用c語言求分段
- 04-02C語言中怎么打出三角函數(shù) c語言中怎
- 04-02c語言調(diào)用函數(shù)求fibo C語言調(diào)用函數(shù)求
隨機閱讀
- 01-10C#中split用法實例總結(jié)
- 08-05織夢dedecms什么時候用欄目交叉功能?
- 01-11Mac OSX 打開原生自帶讀寫NTFS功能(圖文
- 01-10使用C語言求解撲克牌的順子及n個骰子
- 04-02jquery與jsp,用jquery
- 01-10delphi制作wav文件的方法
- 08-05DEDE織夢data目錄下的sessions文件夾有什
- 01-11ajax實現(xiàn)頁面的局部加載
- 08-05dedecms(織夢)副欄目數(shù)量限制代碼修改
- 01-10SublimeText編譯C開發(fā)環(huán)境設置