梅森素數
阿新 • • 發佈:2021-01-13
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;
}
}