hdu 2040 亲和数

C语言题库

共 2083字,需浏览 5分钟

 ·

2021-06-23 08:16

亲和数


Problem Description


古希腊数学家毕达哥拉斯在自然数研究中发现,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。

 

Sample Input

2
220 284
100 200

 


Sample Output

YES
NO


1.目标很明确,就是算真因数之和

2.如果输入两个数中,任意一个数等于另一个数的真因数之和,这两个数就是亲和数


代码:

#include<stdio.h>
int main()
{
long int G(long int a);
int n;
scanf("%d",&n);
getchar();
while(n--)
{
long int a,b;
scanf("%ld%ld",&a,&b);
getchar();
if(a==G(b)&&b==G(a))
printf("YES\n");
else printf("NO\n");
}
return 0;
}
long int G(long int a)
{
long int sum=0,i;
for(i=1;i<=a/2;i++)
if(a%i==0)sum+=i;
return s


python 代码:

test_count = int(input())
answer_list = [] # 存放每一组的结果
def getSum(number):
    list_appr = [] # 创建一个存储真约数的集合
# 求解所有的真约数
    for i in range(1, number // 2 + 1): # 对位于1 ~ number / 2 + 1的数进行遍历
        if number % i == 0: # 是其真约数
            list_appr.append(i) # 放到真约数列表中
    return sum(list_appr) # 返回列表中的和,也就是这个数的所有的真约数的和
def judge(number1, number2):
# pass
# 两个数互为亲和数,就是两个数各自的真约数的和互为对面的数
# 1:求两个数的真约数的和
    answer1 = getSum(number1)
    answer2 = getSum(number2)
# 2:判断
    if answer1 == number2 and answer2 == number1:
        return "YES"
    else:
        return "NO"
for i in range(test_count):
    num1, num2 = map(int, input().split()) #每次输入的测试的两个数
    answer_list.append(judge(num1, num2)) #进入判断函数,并将判断结果返回到结果列表中
# 将结果输出
for answer in answer_list:
print(answer)

浏览 12
点赞
评论
收藏
分享

手机扫一扫分享

举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

举报