梅森数与梅森素数
梅森数(Mersenne number)又称麦森数,是指形如2^p-1的正整数,其中指数p是素数,常记为Mp 。若其是素数,则称为梅森素数。
———————注意———————
- 梅森数:满足2^p—1的所有数,梅森数可能是合数也可能是素数。
- 梅森素数:梅森数中的素数,才称之为梅森素数。
举例:2^11—1=2047=23×89, 所以2047是合数,只能称其梅森数。———————————————— 梅森素数的确定:就是判断一个符合格式要求的梅森数是素数即可 。
算法:打印前n个梅森素数。(C语言版)
#include<stdio.h>
#include<math.h>
int Isprime(int num)
{
int i;
for (i = 2; i <= sqrt(num); i++)
if (num % i == 0) return 0;
return 1;
}
int main()
{
int n;
printf("--------------< 计算前n个Mersenne素数 >------------hao\n\n");
printf("请输入n(n<=8):");
scanf("%d",&n);
int count=3,p=2,x,Mp;
printf("\ni |p |2^p-1 \n");
printf("_______|_______|________\n");
if(n>=1) printf("1 |2 |3 \n");
if(n>=2) printf("2 |3 |7 \n");
for(x=1;count<=n;++x)
{
p = 6*x-1;
Mp=pow(2,p)-1;
if(Isprime(p) && Isprime(Mp) &&count<=n )
{
printf("%-7d|%-7d|%-7d\n",count,p,Mp);
count++;
}
p = 6*x+1;
Mp=pow(2,p)-1;
if( Isprime(p) && Isprime(Mp) && count<=n )
{
printf("%-7d|%-7d|%-7d\n",count,p,Mp);
count++;
}
}
return 0;
}
输入输出样例:
--------------< 计算前n个Mersenne素数 >------------hao
请输入n(n<=8):8
i |p |2^p-1
_______|_______|________
1 |2 |3
2 |3 |7
3 |5 |31
4 |7 |127
5 |13 |8191
6 |17 |131071
7 |19 |524287
8 |31 |2147483647
|