c语言:设计编程找出无符号长整型数域范围内所有的梅森素数。 说明: 1、梅森素数是由梅森数而来。

c语言:设计编程找出无符号长整型数域范围内所有的梅森素数。 说明: 1、梅森素数是由梅森数而来。所谓梅森数,是指形如2p-1的一类数,其中指数p是素数 。如果梅森数是素数,就称为梅森素数。 2、用因式分解法可以证明,若2n-1是素数,则指数n也是素数;反之,当n是素数时,2n-1却未必是素数。前几个较小的梅森数大都是梅森素数,然而梅森数越大,梅森素数却越难出现。 3、是否存在无穷多个梅森素数是数论中未解决的著名难题之一。目前仅发现49个梅森素数,最大的是 274207281-1(即2的74207281次方减1),有22338618位数。
在线等,很急谢谢大神

#include <stdio.h>
int isprime(unsigned long n)  //判断素数的程序
{
unsigned long i;
for(i = 2; i < n ;i++)
{
if(n % i == 0)
break;
}
if(i == n)
return 1;
else
return 0;
}

unsigned long power(unsigned long x, unsigned long n)//求x的n次幂
{
 unsigned long s = 1,i;
 for(i = 0; i < n; i++)
 {
  s = s * x;
 }
 return s;
}
 int main()
 {
unsigned long a,s,i;

        for(i = 2; i <= 32 ; i++)
 {
 s = power(2,i)-1;
 if(isprime(i) && isprime(s))
 printf("2^%lu-1 = %lu\n",i,s);
 }
      

    

}

追问

厉害

温馨提示:答案为网友推荐,仅供参考
第1个回答  2016-03-12
#include <stdio.h>
int isprime(unsigned long n);
int main(void) 
{
int  i;
for(i=1;i<=sizeof(unsigned long)*8;++i)
{
if(isprime((0x01UL<<i)-1))
{
printf("%lu 2^%d-1\n",(0x01UL<<i)-1,i);
}
}
return 0;
}
int isprime(unsigned long n)
{
unsigned long i;
if(n<2)
{
return 0;
}
for(i=2;i*i<=n;++i)
{
if(n%i==0)
{
return 0;
}
}
return 1;
}