簡體   English   中英

如何有效地將整數提升到分數冪?

[英]How to raise an integer to fractional power efficiently?

我在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我怎樣才能將n取為冪,這是一個分數並快速執行?

除非你的n值也非常大,否則對於“非常非常大”的p值, floor(n^(1/p))將傾向於1。 由於你只對整數部分感興趣,你可以通過一個簡單的循環來測試1 ^ P,2 ^ p,3 ^ p等是否大於n。

如果您不需要它們,請不要浪費時間找到確切的值。

對於大p值, n^(1/p)=exp(ln(n)/p) ~~ 1+ln(n)/p

所以你可以將p與n的自然對數進行比較。 如果比率p / ln(n)>> 1(大得多),則可以使用上面的近似值(趨於1)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM