实验4-2-9 梅森数(20 分)
形如2n−1的素数称为梅森数(Mersenne Number)。例如$2^2−1=3 2^3−1=7$都是梅森数。1722年,双目失明的瑞士数学大师欧拉证明了$2^{31}−1=2147483647$是一个素数,堪称当时世界上“已知最大素数”的一个记录。
本题要求编写程序,对任一正整数n(n<20),输出所有不超过2n−1的梅森数。
输入格式:
输入在一行中给出正整数n(n<20)。
输出格式:
按从小到大的顺序输出所有不超过2n−1的梅森数,每行一个。如果完全没有,则输出“None”。
输入样例:
输出样例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
| #include<math.h> #include<stdio.h> int prime (int n){ int i; long k; k=sqrt(n)+1; for(i=2;i<=k;i++){ if(n%i==0){ return 0; } } return 1;
} int main(void) { long mp,n=0,i; scanf("%ld",&n); if(n<20){ for(i = 2;i<n;i++){ mp=pow(2,i)-1; if(prime(mp)){ printf("%d",mp); printf("\n"); } } }else{ printf("n不能超過20"); } return 0; }
|