关于c语言用function算完美数会输出两个一样结果的有关问题
关于c语言用function算完美数会输出两个一样结果的问题
程式码如下
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int j;
int x,m,n=0;
int limit;
int PerNum(int x);
int main()
{
scanf("%d",&limit);
x=2;
while(PerNum(x)<limit)
{
printf("%d\n",PerNum(x));
++x;
}
}
int PerNum(int x)
{
m=pow(2,x);
for(j=2; j<=sqrt(m-1); j++)
{
if((m-1)%j==0)
{
m=m*2;
}
}
n=(m-1)*(m/2);
return n;
}
在输入大于等于496的数字时能输出496这个完美数,但是为什么会输出两遍??后面的8128也是会输出两遍....想了很久一直没想明白,有劳各位大神帮我看看了Orz
------解决思路----------------------
你把printf("%d\n",PerNum(x));改成printf("%d %d\n",x,PerNum(x));你就知道为什么了。
顺便目测下一个33550336会输出6次。
------解决思路----------------------
不好意思理解错了,专业点要改PerNum的算法,不专业的判断下重复值吧
程式码如下
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int j;
int x,m,n=0;
int limit;
int PerNum(int x);
int main()
{
scanf("%d",&limit);
x=2;
while(PerNum(x)<limit)
{
printf("%d\n",PerNum(x));
++x;
}
}
int PerNum(int x)
{
m=pow(2,x);
for(j=2; j<=sqrt(m-1); j++)
{
if((m-1)%j==0)
{
m=m*2;
}
}
n=(m-1)*(m/2);
return n;
}
在输入大于等于496的数字时能输出496这个完美数,但是为什么会输出两遍??后面的8128也是会输出两遍....想了很久一直没想明白,有劳各位大神帮我看看了Orz
------解决思路----------------------
你把printf("%d\n",PerNum(x));改成printf("%d %d\n",x,PerNum(x));你就知道为什么了。
顺便目测下一个33550336会输出6次。
------解决思路----------------------
不好意思理解错了,专业点要改PerNum的算法,不专业的判断下重复值吧