【发布时间】:2014-07-18 07:28:20
【问题描述】:
给定 A,B 打印对 (a,b) 的数量,使得 GCD(a,b)=1 和 1
这是我的答案:
return len([(x,y) for x in range(1,A+1) for y in range(1,B+1) if gcd(x,y) == 1])
我的答案适用于小范围,但如果范围增加则需要足够的时间。 比如
- 1
- 1
有没有更好的写法或者可以优化?
【问题讨论】:
-
查找“相对素数”。
-
记忆你的 gcd 函数
-
由于您正在执行
gcd检查二次数对,因此您应该花时间预先计算所有数字的质因子集;那么找出两个数是否互质是一个简单的集合交集问题。 -
@MartijnPieters:重复的东西完全一样吗?计算相对质数的 a,b
-
顺便说一句:我不会认为这是重复的,因为这个问题是关于测试 许多 对数字,因此可能需要考虑不同的算法。
标签: python list tuples list-comprehension greatest-common-divisor