【親和数】

4089 ワード

テーマリンク:http://115.28.203.224/problem.php?cid=1011&pid=0
テーマの説明
古代ギリシャの数学者ピタゴラスは自然数の研究において、220のすべての真公約数(すなわち、自身の約数ではない)の和は、1+2+4+5+10+11+20+22+55+110=284であることを発見した.284の全部の真公約数は1、2、4、71、142で、合わせてちょうど220です.この数に人々は驚き、親和数と呼ばれています.一般的には、二つの数のうちのどれかが別の数の真の約数の和であれば、この二つの数は親和数である.あなたの任務は一つのプログラムを作成して、与えられた二つの数が親和数かどうかを判断します.
入力
入力データの最初の行は一つの数Mを含み、次にM行があり、各行の一例は二つの整数A、Bを含む.そのうち0<=A、B<=600 000;
出力
各テスト例では、AとBが親和数であればYESを出力し、そうでなければNOを出力します.
サンプル入力
2220 284100
サンプル出力
YES SNO
コード
 1 #include 
 2 using namespace std;
 3 int main()
 4 {
 5     int a, b, suma, sumb, i, j, m;
 6     cin>>m;
 7     for (i = 1; i <= m; i++)
 8     {
 9         cin>>a>>b;
10         suma = 0;
11         for (j = 1; j < a; j++)
12         {
13             if (a%j == 0)
14                 suma += j;
15         }
16         sumb = 0;
17         for (j = 1; j < b; j++)
18         {
19             if (b % j == 0)
20                 sumb += j;
21         }
22         if (a==sumb && b==suma)
23             cout<<"YES"<<endl;
24         else
25             cout<<"NO"<<endl;
26     }
27     return 0;
28 }