假设我们有一个数 n,我们必须找出 n 的任何真除数是偶完美平方的概率。
因此,如果输入像 n = 36,那么输出将是 1/8,因为 36 有 8 个自因数,它们是 {1,2,3,4,6,9,12,18},其中包括只有一个数 (4) 是完全平方和偶数。
让我们看看以下实现以获得更好的理解 -
from math import gcd def solve(n): if n % 4 != 0: return 0 else: nc = n ptr = 2 l = [] while ptr <= nc ** 0.5: a = 0 while nc % ptr == 0: a += 1 nc = nc / ptr if a > 0: l += [a] ptr += 1 if nc > 1: l += [1] k = l[0] d = k + 1 no = int(k / 2) for i in l[1:]: d = d * (i + 1) no *= int(i / 2) + 1 d = d - 1 if int(n ** 0.5) ** 2 == n: no -= 1 g = gcd(d, no) d = d // G no = no // G if no == 0: return 0 else: return str(no) + '/' + str(d) n = 36 print(solve(n))
4, 27输出结果
1/8