Google Code Jam Round 1AのC-Largeの問題「3 + sqrt(5) の20億乗の整数部を1000で割ったあまりを求めよ」(sqrtは平方根)という問題の解き方を教えてもらったので、自分の理解を確認するのもかねて解説を書いてみる。あと、数学的な記号の使い方に抵抗がある人も多いみたいだからプログラミング言語的な表現にこだわって書いてみる。 - まず背景知識として 式1: a[0] == A0 式2: a[1] == A1 式3: a[i + 2] == s * a[i + 1] + t * a[i]という条件が成り立つ数列aの一般項を求める方法について解説する。つまり、a[10000]の値は下のような9998回のループで求まるが、それをせずにいきなり求める方法について解説する。 a[0] = A0 a[1] = A1 for i in range(9998): a[