Python 定义一个将打印友好数字的单参数函数

Python 定义一个将打印友好数字的单参数函数,python,Python,定义一个单参数函数,该函数将打印友好数字打印友好数字(n),其中n是打印友好数字的范围。对于n=10000,有五对朋友号码:220和284、1184和1210、2620和2924、5020和5564以及6232和6368 我编写了代码的开头部分,但我不知道如何编写一个函数来打印10000以内的所有好友号码 def sum_of_divisors(a): pom = 1 for i in range (2, int (sqrt(a)) + 1): if a % i

定义一个单参数函数,该函数将打印友好数字
打印友好数字(n)
,其中n是打印友好数字的范围。对于n=10000,有五对朋友号码:220和284、1184和1210、2620和2924、5020和5564以及6232和6368
我编写了代码的开头部分,但我不知道如何编写一个函数来打印10000以内的所有好友号码

def sum_of_divisors(a):
    pom = 1
    for i in range (2, int (sqrt(a)) + 1):
        if a % i == 0:
            pom += i
            if i != a // i:
                pom += a // i
    return pom

def friendly(a, b):
    if(a == sum_of_divisors(b) and sum_of_divisors(a) == b):
        print("true")
    else:
        print("false")

def print_friendly_numbers(n): 
友好数字的定义
在数论中,友好数是两个或两个以上具有共同丰度指数的自然数,即一个数的因子和与该数本身的比率。两个具有相同“丰度”的数字组成友好的一对;具有相同“丰度”的n个数字构成友好的n元组。

我有一个计算除数和的函数。我有一个功能来检查给定的数字是否友好

我需要如何编写此函数才能输出最多10000个朋友号码?

您可以从标准库中的itertools使用

from math import sqrt
from itertools import combinations

def sum_of_divisors(a):
    pom = 1
    for i in range (2, int (sqrt(a)) + 1):
        if a % i == 0:
            pom += i
            if i != a // i:
                pom += a // i
    return pom

def friendly(a, b):
    if a == sum_of_divisors(b) and sum_of_divisors(a) == b:
        return True
    else:
        return False

def print_friendly_numbers(n):
    for a, b in combinations(range(n), 2):
        if friendly(a, b):
            print(a, b)

print_friendly_numbers(10000)
编辑:

一种更快的方法,只需对每个数字计算一次<代码>除法器之和:

def print_friendly_numbers(n):
    div_sum_map = {}
    for a in range(n):
        div_sum_map[a] = sum_of_divisors(a)
    for a in range(n):
        b = div_sum_map[a]
        if a < b and a == div_sum_map.get(b, None):
            print(a, b)
def打印友好的数字(n):
div_sum_map={}
对于范围(n)内的a:
div_sum_map[a]=除数之和(a)
对于范围(n)内的a:
b=分区和图[a]
如果a
这里有一个想法:循环这些数字,并通过丰度索引将它们保存在dict中。然后在循环结束时,你会有一个包含所有友好数字的dict,非常感谢。