美文网首页
梅森素数

梅森素数

作者: 一路向后 | 来源:发表于2021-12-05 22:42 被阅读0次

1.问题描述

梅森数指的是形如2^n-1的正整数,其中指数n是素数,常记为M_n,如果一个梅森数是素数,则称其为梅森素数。例如2^2-1=32^3-1=7都是梅森素数。试求出指数n<30的所有梅森素数。

2.源码实现

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

/*求平方根*/
int isqrt(int a)
{
    int i;

    if(a == 1)
    {
        return 1;
    }

    for(i=1; i<a; i++)
    {
        if(i*i > a)
        {
            break;
        }
    }

    return i-1;
}

/*求2的n次方-1*/
int pow2sub1(int n)
{
    int a = 1;
    int i;

    for(i=0; i<n; i++)
    {
        a *= 2;
    }

    return a - 1;
}

/*判断是否为质数*/
short isPrime(int a)
{
    int u;
    int i;

    if(a == 1)
    {
        return 0;
    }

    u = isqrt(a);

    for(i=2; i<=u; i++)
    {
        if(a % i == 0)
        {
            return 0;
        }
    }

    return 1;
}

int main()
{
    int a = 0;
    int n = 31;
    int i = 0;
    int j = 1;

    for(i=1; i<n; i++)
    {
        a = pow2sub1(i);

        if(isPrime(i) && isPrime(a))
        {
            printf("M(%d)=%d\n", i, a);
        }
    }

    return 0;
}

3.编译源码

$ gcc -o test test.c -std=c89

4.运行及其结果

$ ./test
M(2)=3
M(3)=7
M(5)=31
M(7)=127
M(13)=8191
M(17)=131071
M(19)=524287

相关文章

网友评论

      本文标题:梅森素数

      本文链接:https://www.haomeiwen.com/subject/sqwwxrtx.html