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
代码:
#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)
评论