[NOI Online 2022 普及組] 數學遊戲 - 題解
阿新 • • 發佈:2022-03-27
場外選手口胡題解
題目大意
- \(t\) 組資料,每組資料給定 \(x, z\),構造最小的 \(y\) 使得 \(z = x \times y \times \gcd(x, y)\),無解則輸出 \(-1\)。
- \(1 \leq t \leq 5 \times 10^5\),\(1 \leq x \leq 10^9\),\(1 \leq z < 2^{63}\)。
解題思路
首先判無解。容易發現如果 \(z\) 不是 \(x\) 的倍數顯然無解。
接下來我們將題目中所給的式子做第一步化簡:
\[y \times \gcd(x, y) = \frac zx \]我們發現 \(\gcd(x, y)\)
不妨設 \(\gcd(x, y) = k\),\(x = k \times n\),\(y = k \times m\),我們有
\[(k \times m) \times k = k^2 \times m = \frac zx \]所以 \(k^2 \mid \frac zx\)。
考慮到 \(x = k \times n\),我們易得 \(k^2 \mid x^2\)。
\(\therefore k^2 \mid \gcd(x^2, \frac zx)\)
似乎有些進展不下去了。那我們來大膽的猜測:有沒有可能這個 \(\gcd(x^2, \frac zx)\)
推柿子,可以得到
\[\gcd(x^2, \frac zx) = \gcd((k \times n)^2, k \times y) = \gcd(k^2 \times n^2, k^2 \times m) = \gcd(n^2, m) \times k \]注意到 \(n, m\) 互質,所以 \(k^2 = \gcd(x^2, \frac zx)\),我們可以愉快地求出 \(k\) 啦!
當然,我們需要判斷一下,如果 \(\gcd(x^2, \frac zx)\) 不是完全平方數則無解。
再次觀察我們最初得到的式子,\(y \times \gcd(x, y) = \frac zx\)
既然我們已經知道了 \(\frac zx\),知道了 \(k\) 也就是 \(\gcd(x, y)\),那麼問題也迎刃而解了,
\[y = \frac zx \div \gcd(x, y) = \frac zx \div \sqrt{\gcd(x^2, \frac zx)} \]單次詢問時間複雜度 \(O(1)\)。
程式碼
資料還沒出,程式碼先咕了