查找具有特定角色的号码

Finding numbers that have specific roles

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

比如6是普通的,因为6×1=6,2×3=6,6−1=2+3;并且 24 也是普通的,因为 12−2=6+4。 我一直在研究如何编写代码,使它 "grabs" 与数字的因数进行特定匹配。

谢谢:)

首先你需要一个方法return一个数字的所有因子对,这个答案提供了一个足够好的解决方案

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