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)\) 的。

所以注意你的常数,而且要尽可能加剪枝 (。ì _ í。)

posted @ 2025-01-19 13:19  positive_deviation  阅读(30)  评论(0)    收藏  举报