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,非常感谢。