编程练习2——09

xiaoxiao2021-02-28  47

 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; }

转载请注明原文地址: https://www.6miu.com/read-59724.html

最新回复(0)