如何有效地将整数提升到分数幂?

时间:2014-05-07 00:38:38

标签: python optimization pow sqrt

我在python中实现了二进制搜索。 现在我想检查元素math.floor(n ^ (1/p))是否在我的二分查找中。 但是p是一个非常非常大的数字。我用fractions module写道:

binary_search.search(list,int (n**fractions.Fraction('1'+'/'+str(p))))

但我有一个错误OverflowError: integer division result too large for a float 我如何才能获得力量,这是一个分数并快速完成?

2 个答案:

答案 0 :(得分:2)

除非n的价值也非常大,否则floor(n^(1/p))将趋于1,非常非常大" p的值。由于你只对整数部分感兴趣,你可以通过一个简单的循环来测试1 ^ P,2 ^ p,3 ^ p等是否大于n。

如果您不需要,请不要浪费时间查找确切的值。

答案 1 :(得分:0)

n^(1/p)=exp(ln(n)/p) ~~ 1+ln(n)/p代表大p值

所以你可以将p与n的自然对数进行比较。如果比率p / ln(n)>> 1(更大),然后你可以使用上面的近似值(趋于1)