풀이
를 해주면 된다. 하지만 long long형도 100^1000000까지는 저장하지 못하기 때문에 그리고 우리의 목적에만 두자면 굳이 a^b를 계산한 후 %10을 할 필요가 없고 연산 중간마다 %10 연산을 해주면 된다.
또한 단순히 반복문을 돌려서 계산해도 되지만 제곱의 성질인 을 이용하면 훨씬 더 빠른 연산이 가능하다. 이 연산에 대한 설명은 여기를 눌러서 확인하길 바란다.
코드
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | #include <cstdio> int pow(int a, int b) { int ans = 1; while (b) { if (b & 1) ans = (ans * a) % 10; a = (a * a) % 10; b >>= 1; } return ans; } int main() { int T; scanf("%d", &T); for (int i = 0, a, b; i < T; ++i) { scanf("%d %d", &a, &b); printf("%d\n", (pow(a, b) + 9) % 10 + 1); } return 0; } |
'온라인저지' 카테고리의 다른 글
[BOJ] 2523번: 별찍기 - 13 (0) | 2018.05.15 |
---|---|
[BOJ] 2447번: 별찍기 - 10 (0) | 2018.05.15 |
[BOJ] 1991번: 트리 순회 (0) | 2018.05.11 |
[BOJ] 4673번: 셀프 넘버 (0) | 2018.04.24 |
[BOJ] 14867번: 물통 (0) | 2018.04.09 |
[BOJ] 14697번: 방 배정하기 (0) | 2018.04.09 |
댓글