我在python 3.5中解决了这个问题.这是我的解决方案代码:
def gcd(a, b):
if b == 0:
return a
return gcd(b, a % b)
def lcm(a, b):
return int((a*b)/gcd(a,b))
def core():
N = int(input())
nums = [int(x) for x in input().split()]
ans = lcm(nums[0], nums[1])
for i in range(0, N):
for j in range(i+1, N):
ans = min(ans, int(lcm(nums[i], nums[j])))
return int(ans)
for t in range(1, int(input()) + 1):
print(core())
Run Code Online (Sandbox Code Playgroud)
它给了我错误的子任务答案3.经过几个小时的拔毛我发现改变了线
return int((a*b)/gcd(a,b))
Run Code Online (Sandbox Code Playgroud)
在lcm函数中
return (a*b)//gcd(a,b)
Run Code Online (Sandbox Code Playgroud)
解决了这个问题.这让我很好奇.我一直认为int()和floor()函数对于正整数是完全相同的.既然我们确信分子和分母总是积极的,为什么这里会出现这种差异?任何int((a*b)/gcd(a,b))与a*b//gcd(a,b)给定a,b 不同的样本测试用例都是正整数?
更新: 示例测试用例,其中int(a/b)与// b不同:250263628386554294 1.
有关解释,请参阅此处
你对数学的理解似乎很好,但是你缺少的是/产生浮点结果,而浮点数的精度有限:
>>> x = 2**64-1
>>> x
18446744073709551615
>>> int(x / 1)
18446744073709551616
Run Code Online (Sandbox Code Playgroud)
即使除以1也会失去精度.相比之下,将两个整数划分为//完全以整数运算的方式,没有浮点中间结果且不会丢失精度.
| 归档时间: |
|
| 查看次数: |
87 次 |
| 最近记录: |