[문제 위치]
https://www.acmicpc.net/problem/31738
[문제 풀이]
이 문제는 수학(모듈러 연산) 를 통해 해결하는 문제이다.
N!을 M으로 나눈 나머지를 구하는 문제이고 N ≥ M이면 N!에 M이 인수로 포함되므로 결과가 0이 되므로, N < M인 경우 곱셈마다 모듈러를 적용해서 선형 시간에 계산한다
아래는 이를 구현한 코드이다.
#include <iostream>
using namespace std;
#define FAST ios::sync_with_stdio(false); cin.tie(nullptr);
int main() {
FAST;
long long N, M;
if (!(cin >> N >> M)) return 0;
if (N >= M) { // N!에 M이 반드시 포함되므로 나머지는 0
cout << 0 << '\n';
return 0;
}
long long ans = 1 % M; // N < M 이므로 i % M == i 이지만 형태상 남겨둠
for (long long i = 2; i <= N; ++i) {
ans = (ans * i) % M;
}
cout << ans << '\n';
return 0;
}'문제 풀이 > 문제 풀이(BOJ)' 카테고리의 다른 글
| [Silver V] 좋은 날 싫은 날 - 17211 (0) | 2025.10.01 |
|---|---|
| [Silver V] 알파빌과 베타빌 - 29615 (0) | 2025.09.30 |
| [Silver V] 스텔라가 치킨을 선물했어요 - 15905 (0) | 2025.09.28 |
| [Silver V] 벚꽃이 정보섬에 피어난 이유 - 17127 (0) | 2025.09.27 |
| [Silver III] 이친수 - 2193 (0) | 2025.09.22 |