C++ 检查友好数对
两个数被称为一个友好数对,只有当第一个数的真因子之和等于第二个数的真因子之和时才成立。
不过,如果你忘记了,毕达哥拉斯学派总是以特征如公正和友谊与数字联系在一起。
问题陈述
实现一个程序,检查给定的数对是否是一个友好数对。
方法
我们首先考虑给定数对的真因子。将第一个数的真因子相加并得到和。同样地,将第二个数的真因子相加并得到和。
如果第一个数的真因子之和等于第二个数的真因子之和,我们称这个数对为一个友好数对。否则,如果第一个数的真因子之和不等于第二个数的真因子之和,则这个数对不是一个友好数对。
示例
输入1
num1 = 220, num2 = 284
输出
220 and 280 are amicable pair
解释
考虑数字220和284。
220的真因子有1、2、4、5、10、11、20、22、44、55和110。将所有这些因子相加,得到的和为284。现在,取284的真因子。真因子为1、2、4、71和142。将所有这些因子相加,得到的和为284。由于得到的两个和相等,我们可以说数字220和280是友好数对。
输入2
num1 = 220, num2 = 280
输出
220 and 280 are not amicable pair
解释
考虑数字220和280。
220的真约数是1、2、4、5、10、11、20、22、44、55和110。将这些约数相加,得到和为284。现在考虑284的真约数。真约数为1、2、4、5、7、8、10、14、20、28、35、40、56、70和140。
将这些约数相加,得到和为440。由于两个和不相等,我们可以说数字220和280不是亲和数对。
算法
步骤1: 输入数字。
步骤2: 找到两个数字的所有约数的和。
步骤3: 最后检查一个数字的约数之和是否等于另一个数字。
步骤4: 如果是,则是亲和数,否则不是。
下面是一个用于检查给定数字对是否是亲和数对的C程序。
示例
#include<stdio.h>
int main(){
int i,n1=220,n2=284,DivSum1=0,DivSum2=0;
//Use one for loop and check for each number starting from 1 to n1 -1.
for(int i=1;i<n1;i++){
//Check for each number in the loop if it can divide the number firstNumber or not. If yes, add this number to the DivSum1. After the loop completes, DivSum1 includes the sum of all the divisors for firstNumber.
if(n1 % i == 0){
DivSum1 = DivSum1 + i;
}
}
//Same way, determine the sum of all divisors for the second number and save it in DiviSum2.
for(int i=1;i<n2;i++){
if(n2 % i == 0){
DivSum2= DivSum2+ i;
}
}
//Last, check if the sum of divisors of the first number is equal to the second number or not. If it is equal, then print that the numbers are Amicable numbers. Otherwise the numbers are not amicable pairs.
if((n1== DivSum2) && (n2 == DivSum1)){
printf("%d and %d are Amicable numbers\n",n1,n2);
}else{
printf("%d and %d are not Amicable numbers\n",n1,n2);
}
}
输出
在执行时,它将产生以下输出:
220 and 284 are Amicable numbers.
结论
同样地,我们可以通过输入任意一对数字来确定给定的数字对是否是亲和数对。本文解决了确定给定数字对是否是亲和数对的挑战。在这里提供了检查给定数字是否构成亲和数对的C编程代码。