티스토리 뷰
728x90
문제 링크: https://www.acmicpc.net/problem/32454
문제 풀이
피사노 주기, 오일러 피 함수, 분할 정복을 이용한 거듭제곱
일단
피사노 주기를 이용하면 된다. 피보나치 수에서 나누는 값이
이 값을 역순으로 계산하면
즉,
그리고 이
코드
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import sys | |
input = sys.stdin.readline | |
mod = int(1e10) | |
def calc(m1, m2): | |
matrix = [[0 for _ in range(2)] for _ in range(2)] | |
for i in range(2): | |
for j in range(2): | |
for k in range(2): | |
matrix[i][j] += m1[i][k] * m2[k][j] | |
matrix[i][j] %= mod | |
return matrix | |
def func(mat, n): | |
if n == 1: | |
return mat | |
else: | |
if n % 2 == 0: | |
new = func(mat, n//2) | |
return calc(new, new) | |
else: | |
return calc(func(mat, n-1), mat) | |
for _ in range(int(input())): | |
n = int(input()) | |
matrix = [[1, 1], [1, 0]] | |
e1 = pow(7, n, 16*int(1e7)) | |
e2 = pow(7, e1, 4*int(1e8)) | |
e3 = pow(7, e2, 15*int(1e9)) | |
if e3 <= 1: rans = '0'*9+str(e3) | |
else: rans = str((func(matrix, e3-1)[0][0])%mod).zfill(10) | |
print(rans) |
728x90
'BOJ' 카테고리의 다른 글
골드 이상 풀이 정리 2주차 (0) | 2024.11.05 |
---|---|
골드 이상 풀이 정리 1주차 (0) | 2024.10.27 |
[BOJ][Python] 백준 32242번 - |
2024.09.19 |
랜덤 마라톤 14주차 (0) | 2024.09.05 |
[BOJ][Python] 백준 9011번 - 순서 (0) | 2022.08.05 |
250x250
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- set
- 위상 정렬
- DP
- 최소 신장 트리
- 구현
- backtracking
- Sorting
- BFS
- 파이썬
- math
- convex hull
- 수학
- MST
- 다이나믹 프로그래밍
- Topological Sorting
- 시뮬레이션
- 백트래킹
- 집합과 맵
- Simulation
- 브루트포스
- greedy
- BOJ
- TEXT
- 너비 우선 탐색
- Implementation
- Brute Force
- 정렬
- 그리디
- 볼록 껍질
- Python
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 | 30 |
글 보관함