1. 程式人生 > 其它 >如何進行小程式測試,小程式測試要點有哪些?

如何進行小程式測試,小程式測試要點有哪些?

我們翻譯一下。

\(ans=g^{\displaystyle\sum_{d|n}C(d,n)}\bmod999911659\)

\(\displaystyle\sum_{d|n}C(d,n)\) 顯然是個天文數字。所以用尤拉定理, \(ans=g^{\displaystyle\sum_{d|n}C(d,n)\bmod999911658}\bmod999911659\)

顯然我們把上面的玩意求出來之後就可以快速冪。

上面的可以列舉 \(d\),是 \(O(\sqrt{n})\)

但是 \(C\) 逆元暴力會有問題,因為 \(C(d,n)\)\(d,n-d\) 可能大於 \(p\),所以會導致無法求逆元。

\(Lucas\) 定理。但是 \(999911658\) 並非質數。

但是可以用 CRT。\(999911658=2\times3\times4679\times35617\)

我們設 \(x=C(d,n)\bmod 999911658\),

\(x\equiv (C(d,n)\bmod 2)\pmod{2}\)

\(x\equiv (C(d,n)\bmod 3)\pmod{3}\)

\(x\equiv (C(d,n)\bmod 4679)\pmod{4679}\)

\(x\equiv (C(d,n)\bmod 35617)\pmod{35617}\)

我們預處理 \(35617\) 以內的階乘即可。

快速冪 \(O(\log n)\) 級別,分解 \(O(\sqrt{n})\),中剩的 \(C(d,n)\bmod p\)\(O(\log n)\) 級別,中剩解方程不影響複雜度(也就 \(4\) 個逆元)。

所以複雜度為 \(O(\log^2n\sqrt{n})\),可以通過。

YJX AK IOI