C语言如何做这个题???

来源:百度知道 编辑:UC知道 时间:2024/09/22 04:10:12
梅森尼数是指使2^n-1为质数的自然数n,求在[1,21]之内
1、有多少个梅森尼数
2、第二大的梅森尼数

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

int CheckPrime(int a) //检测a是否是质数
{
int i;
for(i=2;i<a;i++)
if(!(a%i)) break;

if(i>=a) return 1; //质数返回1
else return 0; //非质数返回0
}

void main()
{
int n,num=0,flog=0,sec;
long int temp;
for(n=21;n>=1;n--)
{
temp=(int)pow(2,n)-1;//temp=2^n-1
if(CheckPrime(temp))
{
num++;flog++;

if(flog==2) sec=n;

}//if
}//for
printf("1到21之间有%d个梅森尼数。\n",num);
printf("第二大梅森尼数是:%d\n",sec);

}//main