Project Euler 291(2)

http://projecteuler.net/index.php?section=problems&id=291


昨日暑い中20km走ったら、軽い熱射病っぽくなった。ちゃんと水分補給しなきゃね。
ちょっと数式をいじっていたら、n2 + 1の方法が使えることが分かった。でもPythonだと遅いしメモリをやたらと食うのでC++で書き直した。それでも500MB超メモリが要る。1GBとか積んでいればそれで楽勝のはずだったんだけど、そうではないので返ってこない。結局、分割して計算する方法を実装した。なんだか知らないがすごく苦労した。これで1分。
うまい方法ってあるのかな?
フォーラムをちょっと見たら、思いっきり力技か、メモリ使いまくりの方法だった。この力技って、確率的なアルゴリズムなのかなあ。中身がわからないから。