10 이하의 자연수의 거듭제곱의 첫 자릿수를 보면 항상 주기가 있다.
EX) 2의 경우, 2, 4, 8, 16, 32, 64, 128, 256,... 과 같이 2, 4, 8, 6이 반복된다.
1, 5, 6은 맨 뒷자리 수가 항상 자기 자신이므로 입력으로 들어오면 입력 그대로 출력해주고
0의 경우 1, 5, 6과 같은 경우지만 10을 출력해야 됨으로 따로 처리한다.
다른 수들의 경우는 주기가 끝날 때까지 거듭제곱들의 첫 자릿수를 리스트에 저장한다.
그 후는 b를 주기로 나는 나머지 번째 리스트 값이 정답이다.
EX) a = 3, b = 7의 경우 [3, 9, 7, 1]가 리스트로 저장되고 b를 4(주기)로 나눈 3번째 리스트 값(7)이 정답이다.
for i in range(int(input())):
a, b = input().split()
a, b = int(a[-1]), int(b)
if a == 1 or a == 5 or a == 6:
print(a)
continue
elif a == 0:
print(10)
continue
result_li = []
t = 1
for _ in range(b):
t *= a
t %= 10
if t in result_li:
break
result_li.append(t)
ans = result_li[b % len(result_li) - 1]
print(ans)
'Agorithm > 백준 알고리즘' 카테고리의 다른 글
백준 알고리즘 1015번 수열 정렬(python) (0) | 2020.01.23 |
---|---|
백준 알고리즘 1010번 다리 놓기(python) (0) | 2020.01.23 |
백준 알고리즘 1008번 A/B(python) (0) | 2020.01.23 |
백준 알고리즘 1004번 어린 왕자(python) (0) | 2020.01.23 |
백준 알고리즘 1003번 피보나치 함수(python) (0) | 2020.01.23 |