Fraction Approximation

2 secs 1024 MB
OxOmiso's icon OxOmiso

想定解法は aa について全探索して bb を二分探索です。だいたい計算回数は最大でも log2(105)T1052.0107\log_2{(10^5)} * T * 10^5 \fallingdotseq 2.0*10^7 くらいで間に合います。

または,分母 bb を全探索し,分母 bb を固定したうえで,nn 以下で出来る限り近くなるように aaO(1)O(1) で求め(切り捨て除算でできます),aa11 ずつ足していく方法も可能です。この方法の方が実装上は簡単です。0.0000000.000000 の扱いに注意してください。

※追記(2022/11/06) ファレイ数列で二分探索を行うことで,分母の最大値を AA として,log(A)log(A) 回ほどの計算回数で答えが求まり,とても高速であるそうです。(startcppさんの提出を参考にしてください。)