728x90
반응형

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)

728x90
반응형

+ Recent posts