梅森素数(C语言求解)

梅森数(Mersenne Prime)指的是形如的正整数,其中指数 n 是素数,即为。如果一个梅森数是素数,则称其为梅森素数。例如都是梅森素数。

当n=2,3,5,7时, 都是素数,但n=11时,,显然不是梅森素数。

1722年,瑞士数学大师欧拉证明了  是一个素数,它共有 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)
{
    inti;

    longk;

    k=sqrt(n)+1;

    for(i=2;i<=k; i++)

       if(n%i == 0)

           return 0;

    return1;
}

int main()
{
    intmp, n=0, i;

    printf("MersennePrime:\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("thenumber of Mersenne Prime less than 20 is:%d\n", n);
    return0;
}

运行结果:
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

提示:更有精彩例题请进入C语言中文网实例精讲,100个C语言实例免费与你分享!

猜你喜欢

转载自blog.csdn.net/qq_25775935/article/details/79367335