Skip to content

Commit b2b75a4

Browse files
committed
[Silver I] Title: 곱셈, Time: 88 ms, Memory: 9328 KB -BaekjoonHub
1 parent c4e59a4 commit b2b75a4

2 files changed

Lines changed: 48 additions & 0 deletions

File tree

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
# [Silver I] 곱셈 - 1629
2+
3+
[문제 링크](https://www.acmicpc.net/problem/1629)
4+
5+
### 성능 요약
6+
7+
메모리: 9328 KB, 시간: 88 ms
8+
9+
### 분류
10+
11+
수학, 분할 정복을 이용한 거듭제곱
12+
13+
### 제출 일자
14+
15+
2026년 2월 24일 08:57:55
16+
17+
### 문제 설명
18+
19+
<p>자연수 A를 B번 곱한 수를 알고 싶다. 단 구하려는 수가 매우 커질 수 있으므로 이를 C로 나눈 나머지를 구하는 프로그램을 작성하시오.</p>
20+
21+
### 입력
22+
23+
<p>첫째 줄에 A, B, C가 빈 칸을 사이에 두고 순서대로 주어진다. A, B, C는 모두 2,147,483,647 이하의 자연수이다.</p>
24+
25+
### 출력
26+
27+
<p>첫째 줄에 A를 B번 곱한 수를 C로 나눈 나머지를 출력한다.</p>
28+
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
let input = require('fs').readFileSync('./dev/stdin').toString().trim().split('\n');
2+
let [A, B, C] = input[0].split(' ').map(BigInt);
3+
4+
function sol(a, b, c) {
5+
if (b === 1n) {
6+
return a % c;
7+
}
8+
9+
let half = sol(a, b / 2n, c);
10+
11+
let pro = (half * half) % c;
12+
13+
if (b % 2n === 0n) {
14+
return pro;
15+
} else {
16+
return (pro * a) % c;
17+
}
18+
}
19+
20+
console.log(sol(A, B, C).toString());

0 commit comments

Comments
 (0)