乘法和使用math.Factorial之间的因式计算



我最近不得不在Python中计算一个包含置换和阶乘的问题。当P(n,m(=n/(n-m(!,我必须计算P(24,23(*P(31,18(

  1. 我最初的尝试是使用";阶乘";函数来自";数学
from math import factorial
res = factorial(24) / factorial(24 - 23) * factorial(31) / factorial(31 - 18)
print(int(res))

这给了我8193078623882211490258228866079033329420993560576,但这不是问题的答案。

  1. 我的第二次尝试是简单地将所有数字相乘
res = 1
for i in range((24 - 23 + 1), (24 + 1)):
res *= i
for i in range((31 - 18 + 1), (31 + 1)):
res *= i
print(res)

这给了我8193078623882216313448919424563251511296000000000,这被接受为答案。

我不认为阶乘函数给了我错误的结果,所以我认为差异是由于python计算大数字的方式,或者是由于上一次整数转换。

但我真的不确定我需要寻找什么,所以我来到了这里。

有人能告诉我为什么计算结果会出现这样的差异吗?或者我应该寻找什么来得到问题的答案?

每个计算机科学家都应该知道浮点算术

使用/进行除法在python中生成float,即使两个操作数都是整数。浮点运算不能准确地表示所有的数字,所以运算结果是错误的。

要使用整数除法,请使用//运算符:

res = factorial(24) // factorial(24 - 23) * factorial(31) // factorial(31 - 18)
# gives res = 819307862388221633448919424563251511296000000000

最新更新