- 문제 링크 : boj.kr/32981
- 난이도 : S4
- 태그 : 분할정복을 이용한 거듭제곱
코드
#include <bits/stdc++.h>
#define all(x) (x).begin(), (x).end()
#define INF 0x7FFFFFFF
#define MOD 1000000007
using namespace std;
using ll = long long;
using ld = long double;
using pii = pair<int,int>;
using pll = pair<ll, ll>;
ll d_pow(ll a, ll b) {
if(b == 0) return 1;
ll sub = d_pow(a, b/2);
ll res = ((sub % MOD) * (sub % MOD)) % MOD;
if(b % 2) res = (res * a) % MOD;
return res;
}
int main()
{
ios::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
int q;
cin >> q;
while(q--) {
int n;
cin >> n;
ll ans = 4;
ans *= d_pow(5, n-1);
ans %= MOD;
if(n == 1) ans = 5;
cout << ans << "\n";
}
return 0;
}
풀이
$N \ne 1$일때 답은 $4 \times 5 ^{(N-1)}$이다.
거듭제곱의 지수가 너무 크므로 분할정복을 이용하여 구해준다.
728x90
'PS' 카테고리의 다른 글
BOJ 28278 : 스택 2 (0) | 2025.01.28 |
---|---|
BOJ 9996 : 한국이 그리울 땐 서버에 접속하지 (0) | 2025.01.27 |
BOJ 33257 : 상현이의 물리학및실험1 실험 대작전 (1) | 2025.01.25 |
BOJ 2823 : 유턴 싫어 (0) | 2025.01.24 |
BOJ 10025 : 게으른 백곰 (2) | 2025.01.23 |