PS

BOJ 31738 : 매우 어려운 문제

lickelon 2025. 1. 7. 22:52

코드

#include <bits/stdc++.h>

#define all(x) (x).begin(), (x).end()

#define INF 0x7FFFFFFF

using namespace std;

using ll = long long;
using ld = long double;
using pii = pair<int,int>;
using pll = pair<ll, ll>;

int main()
{
    ios::sync_with_stdio(0);
    cin.tie(0); cout.tie(0);

    ll n, m;
    cin >> n >> m;
    ll ans = 1;
    for(ll i = 1; i <= min(n, m); i++) {
        ans *= (i % m);
        ans %= m;
    }
    cout << ans;

    return 0;
}

풀이

n > m인 경우 n!은 항상 m의 배수이다.

따라서 n과 m 중 더 작은 값까지 직접 곱해보면 답을 구할 수 있다.

곱할 때 나머지의 성질 (a*b) mod c = (a mod c * b mod c) mod c임을 이용한다.

728x90

'PS' 카테고리의 다른 글

BOJ 27111 : 출입 기록  (0) 2025.01.09
BOJ 31246 : 모바일 광고 입찰  (0) 2025.01.08
BOJ 32932 : 드론 조작  (1) 2025.01.06
BOJ 32752 : 수열이에요?  (0) 2025.01.05
BOJ 31908 : 커플링 매치  (1) 2025.01.04