用 Python 编写程序,查找 x 之间乘积为 x 且互质的对数
pythonserver side programmingprogramming更新于 2026/1/31 11:24:17
假设有一个函数 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对。
为了解决这个问题,我们将遵循以下步骤 −
- count := 0
- sqr := (n 的平方根) + 1 的整数部分
- 对于范围在 2 到 sqr - 1 的基数,执行
- 对于范围在 1 到基数最小值和 (n / 基数 - 基数 + 1) 的下限的 i,执行
- 如果基数和 i) 的 gcd 不等于 1,则
- 进行下一次迭代
- count := count + floor of (n - i * base)/(base * base)
- 如果基数和 i) 的 gcd 不等于 1,则
- 对于范围在 1 到基数最小值和 (n / 基数 - 基数 + 1) 的下限的 i,执行
- 返回 count
示例
让我们看看下面的实现以便更好地理解 −
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 // base - base + 1)):
if gcd(base, i) != 1:
continue
count += (n - i * base) // (base * base)
return count
n = 12
print(solve(n))
输入
12
输出
3
相关文章
有用资源
python 参考教程 - 该教程包含有关 python 的更多信息:https://www.cainiaomax.com/python/

