1. 程式人生 > 其它 >梅森素數

梅森素數

技術標籤:C語言c語言素數篩

Description
梅森素數是由梅森數而來。所謂梅森數,是指形如2^p-1的一類數,其中指數p是素數,常記為Mp 。如果梅森數是素數,就稱為梅森素數(如3、7、31、127等等)。它是以17世紀法國數學家馬林·梅森的名字命名。

Input
輸入為多行,每行一個正整數p(1<p<64),至EOF結束。除了2之外,p其它的可能輸入都是奇數。

Output
輸出為多行,每行一個Mp。如果Mp是梅森素數,就輸出它的值,否則就輸出“no”。

Sample Input
2
3
5
7
9

Sample Output
3
7
31
127
no

一,直接遍歷,但時間長

#include<stdio.h>
#include<math.h>
int main()
{
	unsigned long long int i,n,p;
	
	while(scanf("%llu",&p)!=EOF)
	{
		int flag=0;
		
		n=pow(2,p)-1;  //梅森數 
		
		for(i=2;i<=sqrt(n)+1;i++) //素數 
		{
			if(n%i == 0) flag=1; 
		}
		
		if(flag==1) printf("no\n"
); else printf("%llu\n",n); } }

二,先判斷p是不是素數

#include<stdio.h>
#include<math.h>
int main()
{
	unsigned long long i,p,n,flag=0;
	
	while(scanf("%llu",&p)!=EOF)
	{
		if(p!=2)
		{
			for(i=2;i<sqrt(p)+1;i++)
			{
				if(p%i==0)
				{
					flag=1;break;
				}
			}
if(flag==1) printf("no\n"); } if(flag==0) { n=pow(2,p)-1; for(i=2;i<=sqrt(n)+1;i++) { if(n%i==0) { flag=1; break; } } if(flag==1) printf("no\n"); else printf("%llu\n",n); } flag=0; } }