完全數是其各因子之和正好等於本身的數,如6=1+2+3,28=1+2+4+7+14,所以6,8都是完全數,請編程找出2-20000內的所有完全數.輸入整數n,輸出第n個完全平方數。
第一種:
#include <stdio.h>
void main()
{
int i,n,s=0,k=0;
scanf("%d",&n);
for(i=2;i<=20000;i++,s=0)
{
for(int j=1;j<i;j++)
{
if(i%j==0)
s+=j;
if(i==s)
k++;
}
if(k==n) {printf("%d\n",i);
break;
}
}
}
第二種:
#include <stdio.h>
void main()
{
int i,n,s=0,k=0;
scanf("%d",&n);
for(i=2;i<=20000;i++,s=0)
{
for(int j=1;j<i;j++)
{
if(i%j==0)
s+=j;
}
if(i==s)
k++;
if(k==n) {printf("%d\n",i);
break;
}
}
}
這兩個的區別就是if(i==s) k++;第一個中是在內循環,第二個是在外循環。但我覺得這兩種應該都可以因為第一個是內循環每循環一次就進行判斷i是否等於s,直到最後一次判斷是否相等、但是第一種輸出不出來結果,,請問為啥
因為s在程序運行中是逐漸增加的,如果最終的s是比i大,在程序一,一旦出現s==i的情況,k就加1,k因此就失去了正確計數的作用