我有一個算法,對於一個整數x
和起動整數i
使得1 < i
< x
的i
的下一個值是由計算i = floor(x/i) + (x mod i)
。這一直持續到我們已經看到的i
。我的算法太慢
在JavaScript(雖然這個問題是語言無關):
function f(x, i) {
var map = {};
while(!map[i]) {
map[i] = true;
i = Math.floor(x/i) + (x % i); // ~~(x/i) is a faster way of flooring
}
return i;
}
我可以證明,我們最終會達到我們已經看到了i
,但我想知道:
- 計算下一個
i
是否有更高效的方法? - (更重要的是)有沒有辦法計算第n
i
沒有運行循環n
次?
只是爲了澄清 - 我知道有比使用JS哈希映射爲檢查更快的方法,那地板可以通過整數除法其他語言所取代。我已經完成了這兩種優化,但是我放棄了它們來嘗試使代碼更易於理解。對不起,有任何困惑。
在此先感謝!
這是一些已知的數學問題,如Collatz猜想? – MBo
@MBo不是我所知道的。它源自我正在研究的一個副項目。如果它涉及到一個已知的數學問題,那將是非常瞭解的!幾周前我做了一個類似的數學問題的搜索,但不能提出任何問題,並且在問題上沒有得到太多改進,決定向其他人求助。 – winhowes