摘要:本文以220和284的奇妙邂逅为引,探索了亲和数的神秘世界,并用C语言编织了一个寻找数字间“友谊”的程序。

定义

亲和数,指两个正整数中,彼此的全部约数之和(本身除外)与另一方相等

比如

  • 220的所有因子之和(去除自身),为284
  • 284的所有因子和(去除自身),刚好也为220
  • 这样,我们就把它们两个称为一对亲和数

程序设计思路

设循环数为i

  1. 提取i的所有因数(除去自身),并将其求和,得到iSum
  2. 提取iSum的所有因子(出去自身),得到sumSum
  3. 将iSum与sumSum进行比较
  1. 相等,则i与iSum为一对亲和数
  2. 不相等,则将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;
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.
  • 55.
  • 56.
  • 57.
  • 58.
  • 59.
  • 60.
  • 61.
  • 62.
  • 63.
  • 64.
  • 65.
  • 66.
  • 67.
  • 68.
  • 69.
  • 70.
  • 71.
  • 72.
  • 73.
  • 74.
  • 75.
  • 76.
  • 77.
  • 78.
  • 79.
  • 80.
  • 81.
  • 82.
  • 83.
  • 84.

运行结果

探索数学之美:亲和数与程序实现_#define

结论

本文通过C语言程序成功探索了亲和数,展示了编程在解决数学问题中的应用,加深了对数学之美的认识。