古希腊数学家毕达哥拉斯在自然数研究中发现,220的所有真约数(即不是自身的约数)之和为:
1+2+4+5+10+11+20+22+44+55+110=284。
而284的所有真约数为1、2、4、71、 142,加起来恰好为220。人们对这样的数感到很惊奇,并称之为亲和数。一般地讲,如果两个数中任何一个数都是另一个数的真约数之和,则这两个数就是亲和数。
你的任务就编写一个程序,判断给定的两个数是否是亲和数
Input
输入数据第一行包含一个数M,接下有M行,每行一个实例,包含两个整数A,B; 其中 0 <= A,B <= 600000 ;
Output
对于每个测试实例,如果A和B是亲和数的话输出YES,否则输出NO。
样例
输入样例
2
220 284
100 200
输出样例
YES
NO
思路:
为了避免需要多次判断真约数和,因此首先定义一个函数来计算出一个数的真约数之和,再在主函数中进行引用从而来判断两个数是否为亲和数。
代码实现
include<stdio.h>
int fanc(int n){//定义一个函数
int a=0;
int i;
for(i=1;i<n;i++){
if(n%i==0) //如果这个数除以一个数等于0,则为其约数
a+=i; //将这些约数相加返回最终的约数和
}
return a;
}
int main(){
int a,b;
int x;//所判断的行数
scanf("%d",&x);
for(int i=0;i<x;i++){
scanf("%d %d",&a,&b);
if(a==fanc(b)&&b==fanc(a)){//判断是否为亲和数,a等于b真约数之和,b等于a真约数之和
printf("YES");
}else{
printf("NO");
}
printf("\n");
}