摘要:本文以220和284的奇妙邂逅为引,探索了亲和数的神秘世界,并用C语言编织了一个寻找数字间“友谊”的程序。
定义
亲和数,指两个正整数中,彼此的全部约数之和(本身除外)与另一方相等
比如
- 220的所有因子之和(去除自身),为284
- 284的所有因子和(去除自身),刚好也为220
- 这样,我们就把它们两个称为一对亲和数
程序设计思路
设循环数为i
- 提取i的所有因数(除去自身),并将其求和,得到iSum
- 提取iSum的所有因子(出去自身),得到sumSum
- 将iSum与sumSum进行比较
- 相等,则i与iSum为一对亲和数
- 不相等,则将i自增后,返回步骤1,继续循环
现在,我们已经理清了思路,并做好了程序设计。
来打开编辑器爽一下吧!
代码实现
#include <stdio.h>
#include <stdbool.h>
//设置寻找的范围
#define MAX 10000
#define MIN 0
//求一个数的所有因子(除自身)
int GetDivSum(int x)
{
int i = 0;
int sum = 0;
for (i = 1; i < x; i++)
{
if (x % i == 0)
{
sum += i;
}
}
return sum;
}
int main()
{
//控制所有数字都参与遍历
int i = 0;
//控制数组的循环,主要用与去重
int j = 0;
int k = 0;
int numberOther = 0;
int divSum = 0;
int temp = 0;
int affinityNumber[2][20] = { 0 };
int indexAffinity = 0;
bool flag = false;
//找出范围内的所以亲和数
for (i = MIN; i <= MAX; i++)
{
numberOther = GetDivSum(i);
//去除一些“亲和数”为本身的数,这些数不能被视为亲和数
//因为亲和数是一对数,也就是2个不同的数字
if (numberOther != i)
{
//判断是否为亲和数
if (GetDivSum(numberOther) == i)
{
flag = true;
//判断是否已经有这组亲和数
//若已经存在,则跳过重复的这组
for (k = 0; affinityNumber[0][k] != 0; k++)
{
for (j = 0; j < 2; j++)
{
if (affinityNumber[j][k] == numberOther)
{
flag = false;
break;
}
}
}
//找到新的亲和数
if (flag)
{
//将亲和数存入数组
affinityNumber[0][indexAffinity] = i;
affinityNumber[1][indexAffinity] = numberOther;
indexAffinity++;
printf("%d 和 %d 是一对亲和数\n", i, numberOther);
}
}
}
}
return 0;
}
运行结果
结论
本文通过C语言程序成功探索了亲和数,展示了编程在解决数学问题中的应用,加深了对数学之美的认识。
标签:程序实现,sum,之美,iSum,int,因子,亲和数,220 From: https://blog.51cto.com/xuwenda/12119794