晓君c++ 2024-04-06 19:43 采纳率: 70%
浏览 15
已结题

亲和数c++求解QWQ

描述
古希腊数学家毕达哥拉斯在自然数研究中发现,
220 的所有真约数(即不是自身的约数)之和为:
1+2+4+5+10+11+20+22+44+55+110=284
而 284 的所有真约数为1 2 4 71 142加起来恰好为 220。人们对这样的数感到很惊奇,并称之为亲和数。
一般地讲,如果两个数中任何一个数都是另一个数的真约数之和,则这两个数就是亲和数。

你的任务就编写一个程序,求出在大于等于 n 和 小于等于 m 的所有数中,有多少对亲和数(两个数可以相同)。

输入描述
输出一行两个整数 n,m(1≤n≤m≤500)

输出描述
输出一个整数,表示亲和数的对数。

样例输入 1

220 284
样例输出 1
1

  • 写回答

3条回答 默认 最新

  • 檀越@新空间 2024-04-06 19:43
    关注

    晚上好🌙🌙🌙
    本答案参考ChatGPT-3.5

    问题描述:求解大于等于n且小于等于m的所有亲和数对数。

    解决方案:

    1.枚举区间内的每个数,判断它是否是亲和数。

    2.判断亲和数的方法为:对于一个数i,用j去除以它,如果i mod j==0,则j是i的约数。

    3.求和i的所有真约数,即除了它本身的所有约数和,可用sum记录,sum从1开始加入i的每个约数j,最后减去i本身,即得到所有真约数之和。

    4.判断j是否是i的真约数时,将i比j 大的所有数逐一尝试,如果有一数k能够整除i且k!=j,则j不是i的真约数。

    5.计算亲和数的对数。由于同样的数可能被重复计算,因此在和为i的数字计算完成后,再判断和为sum的数是否是i。

    C++代码实现如下:

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 4月14日
  • 已采纳回答 4月6日
  • 创建了问题 4月6日