Project Euler 207

プロジェクトオイラー
http://projecteuler.net/index.php

Q207.
4tと2tkがすべて自然数tが実数となるような、4t = 2t + kの形の整数の分割を考える。さらに、tも整数のとき、この分割を完全と呼ぶ。kmとなる分割について、完全なものの割合をP(m)とする。はじめてP(m) < 1/12345となるmを求めよ。

問題の意味がなかなかわからなかった。要するに、a2 - a = kで、aが2以上の整数になるのが分割で、aが2のべきのとき完全と呼ぶ。aが2のべきの一つ手前のとき、すなわち、a = 2n+1 - 1のとき、P( (a - 1)(a - 2) ) = n / ( (2n+1 - 1) - 1) = n / (2n+1 - 2)だから、これが1/12345をはじめて下回るnを見つける。



from itertools import count

N = 12345
for n in count(1):
if N * n < 2 ** (n + 1) - 2:
break
a = N * n + 2
m = a * (a - 1)
print m