PS

BOJ 32981 : 찐 Even Number

lickelon 2025. 1. 27. 02:12
  • 문제 링크 : 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