C语言学习历程——编程练习2——09

来源:互联网 发布:java string变量类型 编辑:程序博客网 时间:2024/05/18 01:36
   9.找出7个默森尼数。法国数学家默森尼曾提出下列公式:Mp=2^p-1。
   当p是素数并且Mp也是素数时,称Mp为默森尼数,
   例如,p=5,Mp=2^5-1=31,5和31都是素数,因此31是默森尼数;

   而Mp=2^11-1=2047,11是素数,2047不是素数,因此2047不是默森尼数.


分析:先找出10000以内的素数,然后使用公式求出符合条件的数


下面是代码实现:


/*********************************************************************
   找出7个默森尼数。法国数学家默森尼曾提出下列公式:Mp=2^p-1。
   当p是素数并且Mp也是素数时,称Mp为默森尼数,
   例如,p=5,Mp=2^5-1=31,5和31都是素数,因此31是默森尼数;
   而Mp=2^11-1=2047,11是素数,2047不是素数,因此2047不是默森尼数.
*********************************************************************/


#include <stdio.h>
#include <math.h>


int JudgePrime(int p)  //判断一个数是否为素数,是则返回0,不是返回-1
{
int flag = 0;
int i = 0;


for (i = 2; i < p; i++)
{
if (p % i == 0)
{
flag = 1;
}
}


if (flag == 0)
{
return 0;
}
return -1;
}


int MersenneNum(long *Arr)  //求Mersenne数,放入数组中
{
long int Mp = 0;
int p = 0;
int count = 0;


for (p = 2; p <= 10000; p++)
{
if (JudgePrime(p) == 0) //判断p是不是素数
{
Mp = pow(2, p) - 1;
if (JudgePrime(Mp) == 0)
{
Arr[count++] = Mp; //判断Mp是不是素数,是则放入数组中
if (count >= 7)
{
break;  //算出7个则退出
}
}
}
}
return count;
}


void PrintArr(long *Arr, int count)  //打印结果
{
int i = 0;
for (i = 0; i < count; i++)
{
printf ("%ld  ", Arr[i]);
}
printf ("\n");
}


int main()
{
long int Arr[100] = {0}; //存放求得的Mersenne number 
int count = 0;


count = MersenneNum(Arr);
PrintArr(Arr, count);


return 0;
}

0 0
原创粉丝点击