梅森質數的定義: 當一個數為質數且該質數等於2^n-1(n為任意整數) 的結果,就稱梅森質數
以下是我寫的程式碼:
#include <stdio.h>
#include <stdlib.h>
int Mersenne();
int main()
{
int n,i;
scanf("%d",&n);
printf("前 %d 個梅森質數:",n);
for(i=1;i<=n;i++)
printf("%d ",Mersenne());
printf("\n");
system("pause");
return 0;
}
int Mersenne()
{
int i,s=1,flag=0,sum=1;
static int p=1;
while(s)
{
p=p+2;
if(p%10==3 || p%10==1 || p%10==7) //不知道加上這個判斷能不能提升效率
{
for(i=2;i*i<=p;i++)
if(p%i==0)
flag++;
if(flag==0)
for(i=1;sum-1<p;i++)
sum=sum*2;
if((sum-1)==p)
s--;
flag=0;
sum=1;
}
}
return p;
}
https://en.wikipedia.org/wiki/Lucas%E2%80%93Lehmer_primality_test
#include <stdint.h>
#include <stdio.h>
/* Return zero iff 2^p - 1 is prime. */
int LucasLehmer (int p)
{
uint64_t s = 4;
uint64_t M = (1L << p) - 1;
int i;
for (i=0; i < p-2; ++i)
s = ((__uint128_t)s*s - 2) % M;
return s;
}
int main (void)
{
int p;
for (p=0; p < 64; ++p) {
if (LucasLehmer(p) == 0)
printf("2^%d is prime.\n", p);
}
return 0;
}