寻找具有特定角色的数字

时间:2019-12-10 01:15:33

标签: python int

我正在尝试查找数字是否普通或是否不使用输入。如果一个正整数具有至少两对正整数因子,使得一对对的差等于另一对对的和,则它是普通的。

例如,6是普通的,因为6×1 = 6,2×3 = 6,6-1 == 2 + 3; 24也很普通,因为12-2 = 6 + 4。 我一直在研究如何使代码“抓住”数字因数的特定匹配。

谢谢:)

1 个答案:

答案 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