โ 11440 ํผ๋ณด๋์น ์์ ์ ๊ณฑ์ ํฉ โ
n=int(input())
BIG=1_000_000_007
def get_power(a,b,c):
if b <= 1:
return [[a[0][0]%BIG,a[0][1]%BIG],[a[1][0]%BIG,a[1][1]%BIG]]
x = get_power(a,b//2,c)
if b % 2 == 0:
return prod(x,x)
else:
return prod(prod(x,x),a)
def prod(A,B):
a,b,c,d=A[0][0],A[0][1],A[1][0],A[1][1]
e,f,g,h=B[0][0],B[0][1],B[1][0],B[1][1]
return [[(a*e+b*g)%BIG,(a*f+b*h)%BIG],[(c*e+d*g)%BIG,(c*f+d*h)%BIG]]
core = [[1,1],[1,0]]
matrix_1 = get_power(core,n-1,BIG)
matrix_2 = get_power(core,n,BIG)
print(((matrix_1[0][0]%BIG)*(matrix_2[0][0]%BIG))%BIG)
๐ F1๋ถํฐ Fn๊น์ง์ ๋ชจ๋ ํผ๋ณด๋์น ์์ ์ ๊ณฑ์ ํฉ์ ์๋์ ๊ฐ์ด Fn*Fn+1 ๊ฒฐ๊ณผ๋ก ํํํ ์ ์๋ค.
๐ ์ด ๋ Fn์์์ n์ด ๋งค์ฐ ํฐ ์์ด๋ฏ๋ก Fn์ ๊ตฌํ๊ธฐ ์ํด ๋ถํ ์ ๋ณต์ ์ด์ฉํ ํ๋ ฌ ๊ฑฐ๋ญ์ ๊ณฑ์ผ๋ก O(logn)๋ง์ ๊ตฌํด์ผ ํ๋ค. Fn๊ณผ Fn+1์ ๊ฐ๊ฐ O(logn)๋ง์ ๊ตฌํ ๋ค, modulo multiplication property์ ์ํด ((Fn%BIG) * (Fn+1%BIG))%BIG๋ฅผ ์ต์ข ๋ต์ผ๋ก ์ถ๋ ฅ!
'BOJ > ๐ ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
โ DP Expert(Easy) I - 4 Solvedโ (0) | 2024.01.07 |
---|---|
โ ์ ๋ ฌ ์ต์๊ธ1 - 1๋ฌธ์ ()โ (0) | 2023.02.07 |
๋๊ธ