gpt4 book ai didi

Python 3.5 - '//' 和 'int()' 之间的区别

转载 作者:行者123 更新时间:2023-12-01 22:11:46 25 4
gpt4 key购买 nike

我正在解决 this 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())

它给了我子任务 3 的错误答案。经过几个小时的努力,我发现改变了线路

return int((a*b)/gcd(a,b))

在lcm函数中

return (a*b)//gcd(a,b)

解决了这个问题。这让我很好奇。我一直认为 int() 和 floor() 函数对于正整数是完全相同的。既然我们确信分子和分母永远都是正数,为什么会在这里看到这种差异呢?int((a*b)/gcd(a,b)) 与给定的 a*b//gcd(a,b) 不同的任何示例测试用例a,b是正整数吗?

更新:int(a/b) 不同于 a//b 的示例测试用例:250263628386554294 1.

解释see this

最佳答案

您对数学的理解似乎很好,但您缺少的是 / 产生浮点结果,而 float 的精度有限:

>>> x = 2**64-1
>>> x
18446744073709551615
>>> int(x / 1)
18446744073709551616

即使除以 1 也会失去精度。相比之下,用 // 划分两个整数完全适用于整数运算,没有浮点中间结果,也不会损失精度。

关于Python 3.5 - '//' 和 'int()' 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47489905/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com