No.4 Largest palindrome product
問題.
Q. 回文数(palindrome number) とは, 左右どちらから読んでも同じになる数です. (例えば, 12021 や, 148841)
2桁の数2つの積として表される最大の回文数は, です.
3桁の数2つの積として表される最大の回文数はいくらか.
考え方とプログラム例(Python3)
1. 3桁の数の積のうち, 回文数になっているものを探す
2つの3桁の数を として, その積 が回文数になっているかを調べ, 積が最大となるものを出力します.
Max = [0, 0, 0] for p in range(100, 1000): for q in range(p, 1000): n = p * q if str(n)[::-1] == str(n): if Max[0] < n: Max = [n, p, q] print(str(Max[0]) + "=" + str(Max[1]) + "*" + str(Max[2]))
2. 6桁の回文数のうち, 3桁の数の積で書けるものを探す
3桁の数2つの積は5桁または6桁です.(最小で, 最大で.)
最大のものを求めればよいので, 6桁の回文数を考えます.
6桁の回文数は, 1桁の数 を使って, "abccba" の形で書けるので, それが3桁の数の積になっているかを調べます.
の値を減らしていくループを使うことで, はじめに3桁の数の積で書けるものが最大になり, そこで計算を終了できます. なので, 1. の方法よりも計算時間は早くなります.
import itertools Max = 0 for a, b, c in itertools.product(range(9, 0, -1), range(9, -1, -1), range(9, -1, -1)): n = a * 100001 + b * 10010 + c * 1100 p = 100 while p ** 2 <= n: if n % p == 0 and 100 <= n / p and n / p < 1000: Max = [n, p, n/p] break p += 1 if Max != 0: break print(str(Max[0]) + "=" + str(Max[1]) + "*" + str(Max[2]))