C語言求梅森素數代碼及解析

2021-02-18 Linux公社
問題描述

梅森數(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 <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;
}

運行結果

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

Linux公社的RSS地址:https://www.linuxidc.com/rssFeed.aspx

本文永久更新連結地址:https://www.linuxidc.com/Linux/2018-11/155613.htm

相關焦點

  • C語言求最大公約數代碼及解析
    問題描述從鍵盤輸入兩個整數,求任意兩個正整數的最大公約數(GCD)。
  • C語言求水仙花數代碼解析
    問題分析根據「水仙花數」的定義,判斷一個數是否為「水仙花數」,最重要的是要把給出的三位數的個位、十位、百位分別拆分,並求其立方和(設為s),若s與給出的三位數相等, 三位數為「水仙花數」,反之,則不是。算法設計「水仙花數」是指滿足某一條件的三位數,根據這一信息可以確定整數的取值範圍是 100〜999。
  • C語言求回文素數代碼及解析
    兩位回文素數:11三位回文素數:101、131、151、181、191、313、353、373、383、727、757、787、 797、 919、 929本題要求解的問題是:求出所有不超過1000的回文素數。問題分析本題要使用判斷素數的方法,並且要解決如何求一個整數的迴文數。
  • 寫出高效優美的單片機C語言代碼
    程序能跑起來並不見得你的代碼就是很好的c代碼了,衡量代碼的好壞應該從以下幾個方面來看1,代碼穩定,沒有隱患。a=a%8;可以改為:a=a7;說明:位操作只需一個指令周期即可完成,而大部分的C編譯器的「%」運算均是調用子程序來完成,代碼長、執行速度慢。通常,只要求是求2n方的餘數,均可使用位操作的方法來代替。
  • C語言中「c=a+b」,這種結構合理嗎?
    C語言會同意一些"令人震驚"的結構,下面的結構是合法的嗎,我們來看看幾個例子。 c = a+++b; 以下代碼是合法的嗎,咋的一看不禁有這樣的疑問?
  • C語言求高次方數的尾數代碼解析
    問題描述求13的13次方的最後三位數。
  • 如何寫出高效優美的單片機C語言代碼?
    程序能跑起來並不見得你的代碼就是很好的c代碼了,衡量代碼的好壞應該從以下幾個方面來看1,代碼穩定,沒有隱患。本文引用地址:http://www.eepw.com.cn/article/201611/319838.htm2,執行效率高。3,可讀性高。4,便於移植。
  • 梅森素數為什麼這麼重要?
    梅森素數究竟是個怎樣的數,為何如此重要呢?」為了紀念他,數學界就把2^P-1型素數稱為「梅森素數」。2300多年來,人類僅發現50個梅森素數。這種素數稀奇而迷人,故被人們稱為「數學領域的璀璨瑰寶」。另外,探究梅森素數的重要性質——分布規律似乎比尋找新的梅森素數更為困難。中國數學家和語言學家周海中在這方面取得了重大突破;以他的姓氏命名的「周氏猜測」敘述了梅森素數的分布狀況,並給出了精確表達式。
  • 第51個梅森素數被成功發現!
    為了紀念他,數學界就把2^P-1型素數稱為「梅森素數」。2300多年來,人類僅發現51個梅森素數。這種素數稀奇而迷人,故被人們稱為「數學領域的璀璨瑰寶」。梅森素數貌似簡單,但當指數P值較大時,它的探究不僅需要高深的理論和純熟的技巧,還需要進行艱苦的計算。
  • C語言初學者常見問題與錯誤
    printf("shuru 3 ge xi shu :"); scanf("%f,%f,%f",&a,&b,&c); printf("he shi %f",a + b + c); return 0; } 解析: scanf()函數允許把普通字符放在格式字符串中。
  • C語言求給定範圍內的所有素數代碼及解析
    問題描述求給定範圍start〜end之間的所有素數。
  • C語言編寫程序求水仙花數
    C語言編寫程序求水仙花數水仙花數是一個數學問題,其實質是一個三位數,個位數的立方加十位數的立方加百位數的立方之和等於這個三位數本身。例如153=1*1*1+5*5*5+3*3*3,即153=1+125+27。
  • C語言函數調用過程中的內存變化解析
    打開APP C語言函數調用過程中的內存變化解析 TOMORROW 星辰 發表於 2020-12-11 16:21:13 這個調用不是指C 語言上的函數調用的語法,而是在內存的視角下,函數的調用過程。本文將從C 語言調用實例,內存視角,反彙編代碼來探討C 語言函數的調用過程,也可以說是C 語言函數調用過程圖解。通過這個C 語言函數調用過程圖解,同學們將會知道,C 語言函數在調用時,內存空間是怎樣變化的。 要想理解這一個過程還好涉及到函數棧幀的概念。
  • 梅森素數異常火爆!它有什麼實際應用?
    為了紀念他,數學界就將這種素數稱為「梅森素數」。迄今為止,人類僅發現48個梅森素數。這種素數稀奇而迷人,故被人們稱為「數海明珠」。  梅森素數貌似簡單,但當指數P值較大時,其素性檢驗的難度就會很大;它的探究不僅需要高深的理論和純熟的技巧,而且還需要進行艱巨的計算。
  • 【C語言】02.第一個C語言程序
    學習任何一門語言,首先要掌握的肯定是語法。學習C語言語法的目的:就是能夠利用C語言編寫程序,然後運行程序跟硬體(計算機、手機等硬體設備)進行交互。由於我們的最終目的是學習iOS開發,學習iOS開發的話必須在Mac系統下,因此我就在Mac系統環境下開發C語言程序,而不是在Windows環境下。
  • 梅森素數異常火爆 它有什麼實際應用?
    為了紀念他,數學界就將這種素數稱為「梅森素數」。迄今為止,人類僅發現48個梅森素數。這種素數稀奇而迷人,故被人們稱為「數海明珠」。梅森素數貌似簡單,但當指數P值較大時,其素性檢驗的難度就會很大;它的探究不僅需要高深的理論和純熟的技巧,而且還需要進行艱巨的計算。
  • 10個經典的C語言面試基礎算法及代碼
    C語言實現的代碼如下:Enter number of terms: 10Fibonacci Series: 0+1+1+2+3+5+8+13+21+34+也可以使用下面的原始碼:/* Displaying Fibonacci series up to certain number entered by user.
  • 用C語言編寫屬於自己的程式語言,大一學完C語言即可做!
    首先,明確一點,咱這個項目只是做一個簡單的腳本語言而不是編譯型語言!!!其次,本文不需要太多專業知識,所以不慌。最後,本文只是簡單實現腳本語言,雖然不牛X......實驗環境 : linux2.知識點 : 大一所學 C語言 知識二 要做功能:1.實現語法分析列印 hello-world
  • 必備的10大C語言基礎算法(附完整代碼)
    本文是近百個C語言算法系列的第二篇,包括了經典的Fibonacci數列、簡易計算器、回文檢查、質數檢查等算法。也許他們能在你的畢業設計或者面試中派上用場。C語言實現的代碼如下:#include <stdio.h>int main(){ int count, n, t1=0, t2=1, display=0; printf("Enter number of terms: "); scanf("%d",&n); printf("Fibonacci
  • matlab和c語言的區別
    C語言基本特性:1、高級語言:它是把高級語言的基本結構和語句與低級語言的實用性結合起來的工作單元2、結構式語言:結構式語言的顯著特點是代碼及數據的分隔化,即程序的各個部分除了必要的信息交流外彼此獨立。這種結構化方式可使程序層次清晰,便於使用、維護以及調試。