假设有一个函数f(x),它计算 (p, q) 对的数量,使得
1 < p <= q <= x
p 和 q 互质
p * q = x 所以如果我们有 n。
我们必须为 1 到 n 范围内的所有 i 找到总和 f(x[i])。
因此,如果输入类似于 12,那么输出将是 3,因为 x 值的范围从 1 到 12。
当 x = 6 时,有效对是 (2, 3) 所以 f(6) = 1
当 x = 10 时,有效对是 (2, 5) 所以 f(10) = 1
当 x = 12 时,有效对是 (3, 4) 所以 f(12) = 1
所以总共有 3 对。
让我们看看以下实现以获得更好的理解 -
from math import sqrt, gcd def solve(n): count = 0 sqr = int(sqrt(n)) + 1 for base in range(2, sqr): for i in range(1, min(base, n // 基数 - 基数 + 1)): if gcd(base, i) != 1: continue count += (n - i * base) // (基地*基地) return count n = 12 print(solve(n))
12输出结果
3