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