[백준] 1629번 곱셈 C++
2023. 7. 9. 19:01ㆍ자료구조 및 알고리즘/백준
728x90
백준 1629 https://www.acmicpc.net/problem/1629
1629번: 곱셈
첫째 줄에 A, B, C가 빈 칸을 사이에 두고 순서대로 주어진다. A, B, C는 모두 2,147,483,647 이하의 자연수이다.
www.acmicpc.net
내 풀이의 문제점) recur(a,b,c)가 recur(a,b-1,c)를 부르는 식이니 시간 복잡도는 O(b)가 걸려서 최대 20억 정도에 해당하는 수를 처리하기에는 시간이 너무 든다.
바킹독님 강의 보고 힌트
중요 포인트) a^n*a^n = a^(2n)
그리고 나머지 계산 방법의 원리(10진수 곱한거 나머지는 어떻게 하지?->이걸 생각하면 된다!)
바킹독님 코드는
#include <iostream>
using namespace std;
using ll = long long;
ll POW(ll a, ll b, ll m)
{
if (b == 1) return a % m;
ll val = POW(a, b / 2, m);
val = val * val % m;
if (b % 2 == 0) return val;
return val * a % m;
}
int main(void)
{
ios::sync_with_stdio(0);
cin.tie(0);
ll a, b, c;
cin >> a >> b >> c;
cout << POW(a, b, c);
}
시간 복잡도를 O(logN)으로 확 줄일 수 있다.
출처)바킹독님 강의 및 코드는
강의 https://blog.encrypted.gg/943
[실전 알고리즘] 0x0B강 - 재귀
안녕하세요, 재귀 파트를 시작하겠습니다. 지금 자신있게 말할 수 있는게 있는데 이 파트가 정말 어려울 것입니다. 물론 이전의 내용들 중에서도 군데군데 어려운게 있었겠지만 이번 단원에서
blog.encrypted.gg
728x90
'자료구조 및 알고리즘 > 백준' 카테고리의 다른 글
[백준] 10989번: 수 정렬하기 3 - 메모리 초과 문제 해결 (0) | 2023.08.02 |
---|---|
[백준] 10814번: 나이순 정렬 (C++) - 삽질과 stable sort (0) | 2023.08.02 |
[백준 C++] 1012번 유기농 배추 (0) | 2023.07.03 |
[백준 1182] 부분수열의 합 (0) | 2023.04.06 |
[백준 9663] N-Queen (0) | 2023.04.06 |