如何计算一个非常大的整数的第n个根

33

我需要一种在Python中计算长整数的第n次方根的方法。

我尝试了pow(m, 1.0/n),但是它不起作用:

OverflowError: long int too large to convert to float

有什么想法吗?

所谓的长整数是指像下面这样非常大的整数:

11968003966030964356885611480383408833172346450467339251 196093144141045683463085291115677488411620264826942334897996389 485046262847265769280883237649461122479734279424416861834396522 819159219215308460065265520143082728303864638821979329804885526 557893649662037092457130509980883789368448042961108430809620626 059287437887495827369474189818588006905358793385574832590121472 680866521970802708379837148646191567765584039175249171110593159 305029014037881475265618958103073425958633163441030267478942720 703134493880117805010891574606323700178176718412858948243785754 898788359757528163558061136758276299059029113119763557411729353 915848889261125855717014320045292143759177464380434854573300054 940683350937992500211758727939459249163046465047204851616590276 724564411037216844005877918224201569391107769029955591465502737 961776799311859881060956465198859727495735498887960494256488224 613682478900505821893815926193600121890632


正如David所暗示的,pow(n, 1/3)将给出n的立方根(即3次方根)。 - Brian
5
不会,因为在 Python 小于 3 的版本中,1/3 等于 0。 - Matthew Schinckel
(但这也不是原帖作者想要的。) - Matthew Schinckel
Py3没有整数限制...它们可以无限增长,直到内存耗尽。我在我的安装上进行了测试。这是一个解决方案。 - user3917838
12个回答

-1

尝试将指数转换为浮点数,因为Python中/的默认行为是整数除法

n ** (1 / float(3))


n**(1.0/3) 也可以完成任务 - Mapad
3
溢出错误:长整型数值太大无法转换为浮点数,由于巨大的数字无法转换,因此它将无法工作。 - Visgean Skeloru
据我所知,没有任何迹象表明它使用的是Python 2。 - Solomon Ucko

-3

如果你不是特别担心精度的话,你可以将它转换为字符串,截取一些数字,使用指数函数,然后将结果乘以你截取的数字的平方根。

例如,32123大约等于32 * 1000,立方根大约等于32的立方根乘以1000的立方根。后者可以通过将0的数量除以3来计算。

这避免了使用扩展模块的需要。


1
我担心精度问题,因为我知道这个数字,例如是另一个整数的三次方。(当然,我需要知道这个整数) :) - PiX
此外,将大数转换为字符串可能会出现问题。 - Attila O.
@Attila:这不在他在帖子中给出的“巨大”定义中。此外,我不确定他接受什么格式的输入,但截断的基本思想在大多数格式中都适用。 - Brian
他已经有可用的代码,只是问题在于精度。 - Solomon Ucko

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接