就照著遞迴式做
a = 1
MOD = 10**9 + 9
for _ in range(N-1):
a = (3*a+4) % MOD時間複雜度:
先觀察數列
似乎有甚麼規律
按照定義展開
再用數學歸納法仔細證明
因此我們得知
a = 1, MOD = 10**9 + 9
for _ in range(n):
a = (3*a) % MOD
a = a - 2時間複雜度:
把遞迴式變成一般式
目標: 如何快速求得 ???
if n is even
if n is odd
MOD = 10**9 + 9
def pow(a, n):
if n == 0:
return 1
half = pow(a, n//2)
if n&1 == 1:
return (((half**2)%MOD)*a)%MOD
else:
return (half**2)%MOD時間複雜度:
ans = 1, A = a, MOD = 10**9 + 9
for i in range(32):
if (N>>i)&1:
ans = (ans*A) % MOD
A = (A*A) % MOD