One>twenty 2023-06-24 17:42 采纳率: 72.7%
浏览 26
已结题

python程序无法理解

先引入问题:
两个不同的自然数A和B,如果整数A的全部因子(包括1,不包括A本身)之和等于B;且整数B的全部因子(包括1,不包括B本身)之和等于A,则将整数A和B称为亲密数。求3000以内的全部亲密数。

输入格式:无
输出格式:3000以内的全部亲密数(输出格式:(A,B),不加换行,不加分隔符号),一对亲密数只输出一次, 小的在前

这是在网站上的一段python题解:

for i in range(1,3000):
    s=k=0
    # 计算 i 的真因数和
    for j in range(1,i):
        if i % j == 0:
            s += j
    # 计算 s 的真因数和
    for x in range(1, s):
        if s % x == 0:
            k += x
    # 判断是否构成一组亲密数
    if i == k and i < s:
        # 输出亲密数
        print("({:d},{:d})".format(i, s), end="")

我无法理解这段代码的原因是:为什么计算s的真因数和,s不是i的真因数和吗,两者有什么关系?为什么可以这样计算,而不是在3000以内寻找真因数和是i的数?

  • 写回答

2条回答 默认 最新

  • 梦幻精灵_cq 2023-06-24 18:03
    关注
    • 您的代码有这样子的输出

      img


        经过验证,输出是正确的。之前是我弄错了亲密数定义。🤣

      我试着阅读您的代码先。粗粗“走读”两遍,也是有些懵逼的🤣🤣


    • 我的看法——

        亲密数定义是a的真因子和 == b and b的真因子和 == a 。i为a,那么b最大s了,所以在s以内找b的算法比在3000找寻,优化太多了。
    
    for i in range(1,3000):
        s=k=0
        # 计算 i 的真因数和
        for j in range(1,i):
            if i % j == 0:
                s += j
        # 计算 s 的真因数和
        for x in range(1, s): # 亲密数定义是a的真因子和 == b and b的真因子和 == a 。i为a,那么b最大s了,所以在s以内找b的算法比在3000找寻,优化太多了。
            if s % x == 0:
                k += x
        # 判断是否构成一组亲密数
        if i == k and i < s:
            # 输出亲密数
            print("({:d},{:d})".format(i, s), end="")
    
    

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

报告相同问题?

问题事件

  • 系统已结题 7月2日
  • 已采纳回答 6月24日
  • 创建了问题 6月24日

悬赏问题

  • ¥30 arduino vector defined in discarded section `.text' of wiring.c.o (symbol from plugin)
  • ¥20 关于#c++#的问题:(2)运算二叉树·表达式一般由一个运算符和两个操作数组成:(相关搜索:二叉树遍历)
  • ¥20 如何训练大模型在复杂因素组成的系统中求得最优解
  • ¥15 关于#r语言#的问题:在进行倾向性评分匹配时,使用“match it"包提示”错误于eval(family$initialize): y值必需满足0 <= y <= 1“请问在进行PSM时
  • ¥45 求17位带符号原码乘法器verilog代码
  • ¥20 PySide6扩展QLable实现Word一样的图片裁剪框
  • ¥15 matlab数据降噪处理,提高数据的可信度,确保峰值信号的不损失?
  • ¥15 怎么看我在bios每次修改的日志
  • ¥15 python+mysql图书管理系统
  • ¥15 Questasim Error: (vcom-13)