我在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
我如何才能获得力量,这是一个分数并快速完成?
答案 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)