Quantcast
Channel: プログラミング
Viewing all articles
Browse latest Browse all 8482

ABC166 D問題 - JunKobayashi’s diary

$
0
0

↓問題のページ↓

D - I hate Factorization

 

(懺悔: 公式解説の論理展開を理解できませんでした)

\begin{equation} A^5 - B^5 = X \tag{1} \end{equation}という数式において、\(1 \le X \le 10^9\)より\(X \gt 0\)すなわち\(A^5 - B^5 \gt 0\)となるので、求めるべき解\((A, B)\)は\begin{align} A \gt B \end{align}を満たすことが分かる。

 

1)\(B = 0\)である場合

式\((1)\)は\(A^5 = X\)となる。これは入力された\(X\)がいずれかの正の整数を5乗したものであれば、その整数が\(A\)であることを表しているので、この場合の\((A, B)\)を求めることができた(\(A\)の探索範囲を考えると、\begin{equation} 100^5 = (10^2)^5 = 10^{10} \gt 10^9\end{equation}であるから、\(A\)を\(1\)から始めてインクリメントしていき、5乗した値が\(X\)と一致すれば多めに見積もっても\(100\)回以内には解が見つかる)。

2)\(A = 0\)である場合

式\((1)\)は\(-B^5 = X\)となる。ここで、正の整数\(C\)を用いて\(B = -C\)と表すと、式\((1)\)は\(C^5 = X\)となる。これは1)の場合と本質的に同じであり、解の有無は1)の場合と一致する。したがって、この場合を考える必要はない。

3)\(A \gt B \gt 0\)である場合

式\((1)\)の左辺を因数分解すると以下のようになる(等比数列の和を求める公式において、項数\(n\)、公比\(r\)をそれぞれ\(5\)、\(\displaystyle{\frac{A}{B}}\)とすれば容易に導出できる)。\begin{equation} (A - B)(A^4 + A^3 B + A^2 B^2 + A B^3 + B^4) = X \tag{2} \end{equation}式\((2)\)より、\(A^4 + A^3 B + A^2 B^2 + A B^3 + B^4\)は\(X\)の正の約数であると分かるので、\begin{equation} A^4 + A^3 B + A^2 B^2 + A B^3 + B^4 \le X\end{equation}が成り立つ。また、\(A \gt B\)を用いると、\begin{equation} B^4 + B^3 B + B^2 B^2 + B B^3 + B^4 \lt A^4 + A^3 B + A^2 B^2 + A B^3 + B^4\end{equation}となるので、\(5 B^4 \lt X\)すなわち\begin{equation} B \lt \sqrt[4]\frac{X}{5} \tag{3}\end{equation}を導くことができる。\(X = 10^9\)の時、式\((3)\)の右辺は\(118.92 \dots \)というような値となる。したがって、\(B\)の範囲を\(1\)から\(120\)として(念のため若干余裕を持たせる)全探索すると良い。また、式\((2)\)より、\(A - B\)も\(X\)の正の約数である必要があるため、そのうちの任意の1つを\(d\)とすると、\(A - B = d\)すなわち\(A = B + d\)となり、\(B\)の値に対応する\(A\)が一意に定まる。各\(B\)の値および\(X\)の正の約数についてこのような探索を行って\((A, B)\)が式\((1)\)を満たしているかどうかを確認し、見つかれば解を出力して終了すれば良い。\(N\)を正の整数とする時、\(N\)の正の約数を全列挙するには\(\sqrt N\)以下の整数で試し割りをすれば良いことから\(\mathcal{O}(\sqrt N)\)の処理がかかるため、今回の\(X\)の制約でも十分に間に合う。

(圧倒的に優れた範囲の絞り込み方に気が付いたため取り消し部分は無視してください)

また、\(A, B\)ともに正の整数だから\begin{equation} A^4 \lt A^4 + A^3 B + A^2 B^2 + A B^3 + B^4\end{equation}が言えるので、\(A^4 \lt X\)すなわち\begin{equation} A \lt \sqrt[4]X \tag{4}\end{equation}を導くことができる。\(X = 10^9\)の時、式\((4)\)の右辺は\(177.82 \dots \)というような値となるため、\(A\)の範囲を\(1\)から\(180\)として全探索すると良い。

4)\(0 \gt A \gt B \)である場合

正の整数\(C, D\)を用いて\(A = -C, B = -D\)と表すと、式\((1)\)の左辺は\begin{align} A^5 - B^5 &= (-C)^5 - (-D)^5 \\ &= -C^5 - (-D^5) \\ &= D^5 - C^5\end{align}と変形できる。また、\(0 \gt A \gt B \)より\(0 \gt -C \gt -D \)であり、整理すると\begin{align} D \gt C \gt 0 \tag{5} \end{align}となる。ここまでの結果を整理すると、式\((5)\)が成り立っているという条件の下で、\begin{equation} D^5 - C^5 = X \end{equation}を成り立たせるような正の整数の組\((C, D)\)を見つけ出すことが目的となった。これは3)の場合と本質的に同じであり、解の有無は3)の場合と一致する。したがって、この場合については考える必要がない。

5)\(A \gt 0 \gt B \)である場合

正の整数\(C\)を用いて\(B = -C\)と表すと、式\((1)\)の左辺は\begin{align} A^5 - B^5 &= A^5 - (-C)^5 \\ &= A^5 - (-C^5) \\ &= A^5 + C^5\end{align}と変形できる。ここで、\(C \gt 0\)より、\begin{align} A^5 \lt A^5 + C^5 = X\end{align}ゆえ、\begin{align} A \lt \sqrt[5]X \tag{6}\end{align}が導かれる。同様の理屈により、\begin{align} C \lt \sqrt[5]X \tag{7}\end{align}も得られる。式\((6)\)\((7)\)および\(X \le 10^9 \lt (10^2)^5\)より、解となる\((A, C)\)が存在するのならば、どちらも\(10^2 = 100\)を超えない正の整数であると分かるので、この範囲で全探索をしてしまえば解を見つけることができる(ただし出力すべき解は\((A, B)\)であることに注意)。

 

上記1)から5)で考えるべき場合は全てなので、これを順次実行するようにすれば、制約を満たすようなどの\(X\)が与えられても解を見つけることができる。いずれについても、探索範囲は大きくとも\(200^2 = 40000\)で抑えられるくらいなので余裕をもって制限時間に間に合う。


Viewing all articles
Browse latest Browse all 8482

Trending Articles