1629번: 곱셈
첫째 줄에 A, B, C가 빈 칸을 사이에 두고 순서대로 주어진다. A, B, C는 모두 2,147,483,647 이하의 자연수이다.
www.acmicpc.net
- (A*B)%C = (A%C) * (B%C) % C 라는 모듈러 산술을 이용하여 문제를 풀 수 있습니다.
- 아래 주석을 확인해 주세요
문제 풀이
et fs = require('fs');
let [A,B,C] = fs.readFileSync('/dev/stdin').toString().trim().split(" ").map(BigInt)
/*
(A*B)%C = (A%C) * (B%C) % C
1. 짝수일 때 (A^B)%C = (A^(B/2) * A^(B/2)) % C
= (A^(B/2)%C * A^(B/2)%C) % C
2. 홀수일 때 (A^B)%C = (A^(B/2)) * A^(B/2)) * A) % C
= (A^Math.floor(B/2)%C * A^Math.floor(B/2)%C * A%C) % C
*/
function solution(B) {
if(B === 1n){
return A%C
}
let temp = solution(B/2n)
if(B % 2n === 0n){
return temp * temp % C
}else{
//BigInt에서는 소숫점이 없다. ex)BigInt(11)/BigInt(2) = 5n (5.5n이 아니다)
return temp * temp * A % C
}
}
console.log(Number(solution(B)))
'알고리즘 > 백준' 카테고리의 다른 글
백준 node.js 16920번 확장 게임 JavaScript JS BFS (0) | 2023.07.14 |
---|---|
백준 node.js 1238번 파티 JavaScript JS 다익스트라 (0) | 2023.07.14 |
백준 node.js 13913번 숨바꼭질 4 BFS JavaScript JS (0) | 2023.07.07 |
백준 node.js 14442번 벽 부수고 이동하기2 BFS JavaScript JS (0) | 2023.07.07 |
백준 node.js 1799번 비숍 백트래킹 JavaScript JS (0) | 2023.07.07 |