Test Message

d010: 盈數、虧數和完全數

內容

對一個正整數 N 而言,將它除了本身以外所有的因數加起來的總和為 S,如果 S>N,則 N 為盈數,如果 S<N,則 N 為虧數,而如果 S=N,則 N 為完全數(Perfect Number)。例如 10 的因數有 1、2、5、10,1+2+5=8<10,因此 10 為虧數,而 12 的因數有 1、2、3、4、6、12,1+2+3+4+6=16>12,因此 12 為盈數。至於 6 的因數有 1、2、3、6,1+2+3=6,所以 6 是完全數(它也是第一個完全數)。

現在請你寫一個程式,輸入一個正整數 N,然後印出它是盈數、虧數還是完全數。


輸入

30
26
28

輸出

盈數
虧數
完全數


解題思路

輸入數組不大,用迴圈試除找因數相加判斷即可。


完整程式碼

AC (2ms, 72KB)
#include<stdio.h>

int main()
{
int n, k;
while (scanf(" %d", &n) == 1)
{
k = 0;
for (int i = n - 1; i > 0; i--)
{
if (!(n % i))
k = k + i;
}
if (k < n)
puts("虧數");
else if (k > n)
puts("盈數");
else
puts("完全數");
}
return 0;
}