Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 사이클 없는 그래프
- graph #최단경로
- 레드아보
- 코딩
- boj #백준
- C++
- backtracking #codetree #디버깅 #삼성코테
- 1174
- c++ #boj #
- 쌤쌤쌤
- 투포인터 #백준 #boj #20922 #22862
- LIS #가장긴증가하는부분수열 #
- c++ #입출력 #속도 #ios #sync_with_stdio #cin #cout #tie
- 30870
- hcpc
- N번째큰수
- 백준
- 3343
- 22869
- BOJ
- 줄어드는수
- 20117
- 16202
- 호반우 상인
- 진법변환 #2to10 #10to2 #이진법 #십진법 #변환 #bitset #c++
- 3D #Reconstruction #computer #vision #volume #metric #tsdf #kinect #fusion
- 최소 #공배수 #최대 #공약수 #유클리드 #호제법 #lcm #gcd #c++ #boj #3343 #백준 #장미
- graph
- 이분탐색 #dp #11053
- 백준 #다익스트라 #dijkstra #9370 #c++
Archives
- Today
- Total
hyunjin
[C++][BOJ 1629 곱셈] pow 연산 줄이기 본문
728x90
pow를 직접 구현하는 문제이다.
가장 단순하게 for문 돌려서 구현하면 당연히 시간 초과가 나온다.
연산 횟수를 줄여야한다.
예를 들어
$A^{4} = (A^{2})^2 $ : 짝수일때
$A^{5} = A * (A^{2})^2 $ : 홀수일때
이렇게 연산을 줄일 수 있다.
원래대로라면 $A^{4} $는 A*A*A*A로 연산이 총 3번이지만 2번으로 줄일 수 있게 된다.
즉, log2N 으로 연산 횟수가 줄어든다.
이것을 pow함수로 구현해주면 된다.
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll A,B,C;
void Input(){
cin >> A>>B>>C;
}
ll pow(int b){
if(b==0) return 1;
ll tmp = pow(b/2);
tmp = tmp*tmp%C;
if(b % 2) return A*tmp%C;
return tmp;
}
void Solution(){
cout<<pow(B);
}
void Solve(){
Input();
Solution();
}
int main(){
ios::sync_with_stdio(0);
cin.tie(0);cout.tie(0);
Solve();
}
참고
1629 질문(더 자세한 설명 있음.)
[프로젝트 오일러]1^1 + 2^2 + 3^3 + ... + 1000^1000 의 마지막 10자리
728x90
'알고리즘 연습 > 백준' 카테고리의 다른 글
[BOJ 15663/15664 c++]N과 M, set, backtracking (0) | 2022.10.01 |
---|---|
[C++][BOJ 7662 이중 우선순위 큐] multiset (0) | 2021.12.15 |
[C++][BOJ 2170 선긋기] (0) | 2021.09.09 |
[C++][BOJ 1174 줄어드는 수] (0) | 2021.09.09 |
[C++][BOJ 1461 도서관] 정렬 (0) | 2021.09.07 |