- 本記事はProjectEulerの「100番以下の問題の説明は記載可能」という規定に基づいて回答のヒントが書かれていますので、自分である程度考えてみてから読まれることをお勧めします。
問題 52. 並び替えの倍数
原文 Problem 52: Permuted multiples
問題の要約:ある数の2x,3x,4,x5,x6の数が全部並び替えると元の数と同じになる最小の数を求めよ
並び替えて同じがどうかは「Problem 49: 並び替え素数」で作ったisPermSameを使います。
def isPermSame(n1, n2):
return ("".join(sorted(str(n1)))) == ("".join(sorted(str(n2))))
def isPermMulSame(n, m):
for mul in range(2,m+1):
if not isPermSame(n, n*mul): # if not permutation same
return False
return True
for n in range(100,167000+1):
if isPermMulSame(n, 6):
break
print(f"Answer: {n}")
(開発環境:Google Colab)