今天在leetcode上面碰到了在o(1)時間解決數根問題,後來發現運用數學公式確實可以在常數時間內解決。
for base b (decimal case b = 10), the digit root of an integer is: or
note here, when n = 0, since (n - 1) % 9 = -1, the return value is zero (correct).
推導過程:參考
推導:假定十進位制數n,表示式寫為 x
=∑i=
0n−1
ai10i
其中ai
表示從低到高的每一位,因為10i
≡1i≡
1(mod9)
,那麼 x≡
∑i=0
n−1a
i(mod9)
也就是說
乙個數我們使 f和他各位數之和
的模9同餘
(x)=
∑i=0
n−1a
i 也就是 f(
x)≡x
(mod9)
則有 f(f
(x))
≡f(x
)≡x(
mod9)
就是說每次累加模9的操作對於原數直接取模9是一樣的,但只適用於x≢
0(mod9)
完整的公式為 d
r(n)
=⎧⎩⎨
⎪⎪⎪⎪
⎪⎪0,
9,nmod9,
if n=0
if n≠0
,n≡0
(mod9)
if n≢0
(mod9)
最後推導出
digital root = 1 + ((num - 1) % 9)
單位根反演推導
給出兩個整數 n,s 以及乙個長度為 4 的陣列 a 求 sum c n,i s i a 因為只有 4 個值,所以我們考慮將答案拆開 ans sum sum i equiv r mod 4 c n,i s i 我們考慮單位根反演 k n frac sum omega 考慮證明 k n 成立,那麼顯然...
Catalan數公式推導
如何把下列遞迴公式 f n f 0 f n 1 0 f 1 n 1 1 f 2 f n 1 2 f n 1 0 f 0 轉化為 f n c 2n,n n 1 可以利用母函式 發生函式 令g x f 0 f 1 x f 2 x 2 那麼遞迴公式左邊就是g x 的n次項係數。右邊是g x 2的n 1次項...
程式設計題 數根
題目描述 數根可以通過把乙個數的各個位上的數字加起來得到如果得到的數是一位數,那麼這個數就是數根 如果結果是兩位數或者包括更多位的數字,那麼再把這些數字加起來。如此進行下去,直到得到是一位數為止。比如 對於24來說,把2和4相加得到6,由於6是一位數,因此6是24的數根。再比如39,把3和9加起來得...