首页 > 解决方案 > 使用函数的友好数字

问题描述

我试着看看这对友好的数字是多少(20000以下)。(友好数:两个不同的数相关联,以至于每个数的真因数之和等于另一个数。(一个数的真因数是该数的一个正因数,而不是该数本身。例如,真因数6 的除数是 1、2 和 3。)所以我编写了代码..并进行了调试。

def amicable(num):
    a=1
    for i in range(2,num):
        if num%i==0:
            a=a+i
    return a
for j in range(2,20000):
    amicable(j)
for k in range(2,20000):
    amicable(k)

if amicable(j)==k and amicable(k)==j and j!=k:
    print(j,'Amicable',k)

它有效,但它不打印任何东西。问题是什么?

标签: python

解决方案


我认为你的代码,除了amicable函数,应该在逻辑上和语法上进行更改。

  • 您执行许多没有目的的函数调用:

    for j in range(2,20000):
        amicable(j)  # This call returns integer value, but result of this call is not used anywhere
    for k in range(2,20000):
        amicable(k)  # Same as above
    
  • if 语句在逻辑上是正确的,但在语法上是不正确的。你有一个错字amicalbe(k)==j->amicable(k)==j

  • 您要检查数字 和 对的所有组合j,因此您必须对每对数字和k执行 if 语句:jk

    for j in range(2,20000):
        for k in range(2,20000):
            if amicable(j)==k and amicable(k)==j and j!=k:
                print(j,'Amicable',k)  # prints for ex. 220 Amicable 284
    

    您之前所做的是仅对 and 的“最后分配”值执行 if 语句jk因为在执行 for-loop iterator-variable 后具有其“最后分配”值:

    for value in range(2, 20000):
        pass
    print(value)  # prints "lastly assigned" value: 19999
    

推荐阅读