C语言编写子函数

写函数 int IsPrime(unsigned int n),
函数功能为:判定n是否是素数,若是,返回1;否则,返回0。
利用上述IsPrime编写函数
int IsMPrime(unsigned int n),
函数功能为:判定n是否是梅森素数,
若是,返回1;否则,返回0。
写主函数,输入M,输出1~M之间的所
有梅森素数。
梅森素数:即可以表示为2p-1的素数,
其中p也为素数。如3,7,31。

0分。。。自己调吧。
#include <stdio.h>
int IsPrime(unsigned int n){
unsigned int i;
for(i=2;i<n;i++){//对大于1小于n的数进行循环
if(n%i == 0){//如果期间有能整除的数,直接返回0
return 0;
}
}
return 1;//返回1
}

int IsMPrime(unsigned int n){
if(IsPrime(n) ==0){//如果此数本身不是素数直接返回0
return 0;
}
unsigned int p;
unsigned int x;
p=0;
x=n+1;
wihle(x !=1){//求出比x大且与x最近的2的p次方中的p
x=x>>1;
p++;
}
if(pow(2,p) != n+1){//如果此数+1不是2的p次方,则直接返回0
return 0;
}
return IsPrime(p);//判断p是否为素数,返回判断值
}

int main(){
unsigned int m;
scanf("%d”,&m);
if(m > 1000){//为了防止输入的数太大导致机器死掉,限定输入的数小于1000。
return 0;
}
for(;m>0;m--){//对大于0,小于输入数的整数挨个进行判断
if(IsMPrime(m) ==1){//如果是梅森素数直接打印
printf("%d,",m);
}
}
return 0;//结束程序
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-05-18
子函数写在前,不需要写声明,但函数过多会显得结构混乱;
子函数写在后,需要写声明,但在声明处加了函数说明注释之后,代码结构比较清晰;