我需要一种在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
Gmpy是一个C编码的Python扩展模块,它包装GMP库,为Python代码提供快速多精度算法(整数、有理数和浮点数)、随机数生成、高级数理论函数等。
包括一个
root
函数:例如,20根:
通过避免while循环,将low设置为10**(len(str(x))/n)和high设置为low*10,可以使它运行得稍微快一点。最好是用按位长度替换len(str(x))并使用位移位。根据我的测试,我估计第一次加速5%,第二次加速25%。如果整数足够大,这可能很重要(加速可能会有所不同)。如果不仔细测试代码,就不要相信我的代码。我做了一些基本测试,但可能漏掉了一个边缘案例。此外,这些加速值随所选的数字而变化。
如果您使用的实际数据比您在这里发布的数据大得多,那么这个更改可能是值得的。
标准值0.626754999161
海拔0.566340923309
如果真的是个大数字。你可以用二进制搜索。
例如:
相关问题 更多 >
编程相关推荐