這題考點很刁鑽,首先考驗的是讀者的數學水平如何,考點為:
1. 什么是完數
2. 什么是因子
,難度為:1顆星
首先我們需要了解一下什么是完數:
如果一個數恰好等於它的真因子之和,則稱該數為“完全數”
。
各個小於它的約數(真約數,列出某數的約數,去掉該數本身,剩下的就是它的真約數)的和等於它本身的自然數叫做完全數(Perfect number),又稱完美數或完備數。
例如:
第一個完全數是6,它有約數1、2、3、6,除去它本身6外,其余3個數相加,1+2+3=6。
第二個完全數是28,它有約數1、2、4、7、14、28,除去它本身28外,其余5個數相加,1+2+4+7+14=28。
第三個完全數是496,有約數1、2、4、8、16、31、62、124、248、496,除去其本身496外。
解題思路:
根據完數的定義,解決本題的關鍵是計算出所選取的整數i的因子(因子就是所有可以整除這個數的數)
將各因子累加到變量s (記錄所有因子之和)
若s等於i,則可確認i為完數,反之則不是完數。
1 #include<stdio.h> 2 int main() 3 { 4 int i, j; // 變量i控制選定數范圍 5 int sum; // j控制除數范圍 6 for (i = 2; i <= 1000; i++) 7 { 8 sum = 0; // 保證每次循環時 sum 的初值為0 9 10 for (j = 1; j < i; j++) 11 { 12 if (i % j == 0) // 判斷j是否為i的因子 13 { 14 sum = sum + j; 15 } 16 } 17 18 if (sum == i) // 判斷因子之和是否和原數相等 19 { 20 printf("%d\n", i); 21 } 22 } 23 }

