栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

Mersenne素数(梅森素数)C语言版

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Mersenne素数(梅森素数)C语言版

梅森数与梅森素数

梅森数(Mersenne number)又称麦森数,是指形如2^p-1的正整数,其中指数p是素数,常记为Mp 。若其是素数,则称为梅森素数。

———————注意———————

  • 梅森数:满足2^p—1的所有数,梅森数可能是合数也可能是素数。
  • 梅森素数:梅森数中的素数,才称之为梅森素数。

举例:2^11—1=2047=23×89,
所以2047是合数,只能称其梅森数。————————————————
梅森素数的确定:就是判断一个符合格式要求的梅森数是素数即可 。

算法:打印前n个梅森素数。(C语言版)




#include
#include
int Isprime(int num)//判断是否为素数,是则返回1(真),否者返回0(假) 
{
	int i;
    for (i = 2; i <= sqrt(num); i++)
    if (num % i == 0) return 0;
    return 1;
}
int main()
{
	int n;
	printf("--------------< 计算前n个Mersenne素数 >------------haonn"); 
	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");//如果n符合要求则打印前两个梅森素数 
	for(x=1;count<=n;++x)
	{
		p = 6*x-1;//6x的左侧 
		Mp=pow(2,p)-1;
        if(Isprime(p) && Isprime(Mp) &&count<=n ) //如果p为素数,梅森数Mp也为素数,则其为梅森素数。且若这是前n个梅森素数,则打印。 
        {
          printf("%-7d|%-7d|%-7dn",count,p,Mp);
          count++;
        }
        
        p = 6*x+1;//6x的右侧 
        Mp=pow(2,p)-1;
        if( Isprime(p) && Isprime(Mp) && count<=n ) 
        {
         printf("%-7d|%-7d|%-7dn",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
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/302303.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号