首页 > ACM题库 > HDU-杭电 > hdu 2040 亲和数-数学相关-[解题报告]C++
2013
12-26

hdu 2040 亲和数-数学相关-[解题报告]C++

亲和数

问题描述 :


古希腊数学家毕达哥拉斯在自然数研究中发现,220的所有真约数(即不是自身的约数)之和为:

1+2+4+5+10+11+20+22+44+55+110=284。

而284的所有真约数为1、2、4、71、 142,加起来恰好为220。人们对这样的数感到很惊奇,并称之为亲和数。一般地讲,如果两个数中任何一个数都是另一个数的真约数之和,则这两个数就是亲和数。

你的任务就编写一个程序,判断给定的两个数是否是亲和数

输入:

输入数据第一行包含一个数M,接下有M行,每行一个实例,包含两个整数A,B; 其中 0 <= A,B <= 600000 ;

输出:

输入数据第一行包含一个数M,接下有M行,每行一个实例,包含两个整数A,B; 其中 0 <= A,B <= 600000 ;

样例输入:

2
220 284
100 200

样例输出:

YES
NO

#include<stdio.h>
 int judge(int n)//返回真约数的和
 {
     int count = 0;
     int i;
     for(i = 1;i < n; i++)
     {
         if (n % i == 0)//是真约数就累加
         {
             count += i;
         }
     }
     return count;
 }
 int main()
 {
     int t;
     int n,m;
     scanf("%d",&t);
     while(t--)
     {
         scanf("%d%d",&n,&m);
         if (judge(n) == m && judge(m) == n)//同时满足就是亲和数。
         {
             puts("YES");
         }
         else
         {
             puts("NO");
         }
     }
     return 0;
 }

解题转自:http://www.cnblogs.com/qiufeihai/archive/2012/01/13/2321964.html


  1. Thanks for using the time to examine this, I truly feel strongly about it and enjoy finding out far more on this subject matter. If achievable, as you achieve knowledge