关于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次。
------解决思路----------------------
引用:
Quote: 引用:

while(x<=limit)
问题不在这里吧...我改了之后出来一大堆东西.....

不好意思理解错了,专业点要改PerNum的算法,不专业的判断下重复值吧