CF1796F
通过设 \(n\) 的位数为 \(z\),\(b\) 的位数为 \(y\),得出题目中式子为
\[\frac{a \times 10^z + n}{n \times 10^y + b} = \frac{a}{b} \Rightarrow an \times 10^y+ab = ab \times 10^z + nb
\]
将 \(n\) 表示出来,得:
\[an \times 10^y - nb = ab \times (10^z - 1) \Rightarrow n = \frac{ab \times (10^z-1)}{a \times 10^y - b}
\]
因为 \(n\) 是整数,所以有:
\[a \times 10^y - b \mid ab \times (10^z - 1)
\]
设 \(k = (a,b), a = a'k, b = b'k\)。
有:
\[a' \times 10^y - b' \mid b \times (10^z - 1)
\]
设 \(a' \times 10^y - b' = d_{b}d_{z}\),其中 \(d_{b} \mid b\), \(d_{z} \mid (10^z - 1)\)。
那么枚举 \(y, z, d_{z},d_{b}\)。
因为有:
\[b' \le b < 10^y,a'\times 10^y - b'=d_{b}d_{z}
\]
所以:
\[a' \times 10^y - b' \equiv d_{b}d_{z} (\bmod \ 10^y)
\]
\[b' \equiv -d_{b}d_{z} (\bmod \ 10^y)
\]
又因为 \(b' \le b < 10^y\),所以:
\[b’ = 10^y - d_{b}d_{z} \bmod 10^y
\]
那么有:
\[a' = \frac{d_{b}d_{z}+b'}{10^y}
\]
所以再枚举 \(b\),因为 \(d_{b} \mid b\) 且 \(b' \mid b\) 且 \(b\) 的位数为 \(y\)。
所以:
\[10^{y-1} \le b < 10^{y} 且 \operatorname{lcm}(d_{b}, b') \mid b
\]
得出 \(b,b',a'\),也能求出 \(a\) 了,然后 \(n\) 也就解出来了。
时间复杂度:
当枚举 \(z,d_{z}\) 时,时间复杂度为 \(O(1)\),但有个 185 的常数。
当枚举 \(y,d_{b},b\) 时,因为对于同一个 \(d_{b}\),\(b\) 的枚举范围时不交的,所以是 \(O(B \ln B)\) 的。
所以总时间复杂度为 \(O(B \ln B \times 185)\) 的。
所以注意你的常数,而且要尽可能加剪枝 (。ì _ í。)

浙公网安备 33010602011771号