![見出し画像](https://assets.st-note.com/production/uploads/images/25060425/rectangle_large_type_2_b49cfd7648d18ed0b4dd4b407d5642ec.png?width=1200)
Photo by
4hintaro
AtCoder ABC.166 D問題「I hate Factorization」見直し
解説みてどうにか、こうにかですね。
問題
A^5−B^5=Xを満たす整数の組 (A,B)をひとつ示してください。 ただし、与えられるXに対して、条件を満たす整数の組 (A,B)が存在することが保証されています。
条件
1≦X≦10^9
Xは整数
解答例
n = int(input())
a = [i**5 for i in range(120)]
for i in range(120):
for j in range(i+1,120):
if a[j]-a[i] == n:
print(j,i)
break
if a[j]+a[i] == n:
print(j,-i)
break
else: continue
break
反省
なんで、上記が出なかったのか。一番大きな要因はAとBが取りうる最大値を考えることができなかったことだろう。AとBの取りうる最大値は、AとBの差が最小(1)の場合「n^5-(n-1)^5」で回答が10^9を超える値を算出することで求められる。
#+の場合
i = 0
ans = 0
while ans <= 1000000000:
i += 1
ans = i**5 - (i-1)**5
print(i)#120
#-の場合
i = 0
ans = 0
while ans <= 1000000000:
i -= 1
ans = i**5 - (i-1)**5
print(i)#-119
ということで、それ以上だと差が10^9に収まらないためAとBが取りうる最大の値は119ということになる。(ちなみに差が2の場合は差がさらに大きくなるので101とかになる。)
ここまで考えられたらあとは結構簡単で、「1^5,2^5,3^5,4^5,.....119^5」のリストを作成して、総当たりで回答を求めると良い。ちょっと気にしないといけないのは、Bの値が「-(マイナス)」の場合も忘れない様にすること。
いやぁ、次似た問題が出たら回答したいな。
この記事が気に入ったらサポートをしてみませんか?