我正在尝试查找数字是否普通或是否不使用输入。如果一个正整数具有至少两对正整数因子,使得一对对的差等于另一对对的和,则它是普通的。
例如,6是普通的,因为6×1 = 6,2×3 = 6,6-1 == 2 + 3; 24也很普通,因为12-2 = 6 + 4。 我一直在研究如何使代码“抓住”数字因数的特定匹配。
谢谢:)
答案 0 :(得分:1)
首先,您需要一种方法,该方法将返回数字的所有因子对,此答案提供了足够体面的解决方案https://stackoverflow.com/a/5505024/548562
def f(value):
factors = []
for i in range(1, int(value**0.5)+1):
if value % i == 0:
factors.append((i, value / i))
return factors
现在,我们拥有所有可能的因子对,我们需要遍历每个置换,以查看一对对的总和是否等于另一对的差。 itertools provides a permutations function可用于此目的
def is_special(x):
factor_pairs = f(x)
for p1, p2 in itertools.permutations(factor_pairs, 2):
if p1[1] - p1[0] == p2[0] + p2[1]:
return False
return True