第六題 親和數

畢達哥拉斯曾說:「朋友是你靈魂的倩影,要像 220與 284一樣親密。」,
這裡提到的 220 與 284為「親和數 Amicable Number」,
其定義為:彼此的全部因數(本身除外)總和,與 另一方相等;
如 220因數分解為 1*2*4*5*10*11*20*22*44*55*110,則:
220(自身以外)因數總和:1+2+4+5+10+11+20+22+44+55+110 = 284
而 284 因數分解為 1*2*4*71*142,則:
284(自身以外)因數和:1+2+4+71+142 = 220
剛好都等於對方。請寫程式,判斷兩個給定的數字 a、b 是否為親和數。

輸入說明
輸入兩個正整數 0 < a、b < 1000000,中間以空格隔開。

輸出說明
若 a 和 b 為親和數,則輸出 true ,否則輸出 false。

範例
輸入 輸出
284  220 true
10744  10856 true
10856  12345 false


分析
此題題意敘述上有些錯誤如下:
220 因數分解為 1*2*4*5*10*11*20*22*44*55*110,應改為
220 之正因數(或正約數)為 1、2、4、5、10、11、20、22、44、55、110
因為 1*2*4*5*10*11*20*22*44*55*110 = 515363200000 不是 220
同理,而 284 因數分解為 1*2*4*71*142,應改為
284 之正因數(或正約數)為 1、2、4、71、142

此題應為送分題,程式如下:
cin >> n1 >> n2;
s = 1;
for (i = 2;i <= n1 / 2;i++) //求 n1 正因數
     if (n1%i == 0)
          s += i;
          if (s == n2) { //若 n1 正因數和等於 n2, 則反求 n2 正因數和是否等於 n1
               s = 1;
               for (i = 2;i <= n2 / 2;i++) //求 n2 正因數
                    if (n2%i == 0)
                         s += i;
               cout << ((s == n1) ? "true" : "false") << "\n";//若 n2 正因數等於 n1 則輸出 true
          }
     else
          cout << "false\n";