문제
재용이는 최신 컴퓨터 10대를 가지고 있다.
어느 날 재용이는 많은 데이터를 처리해야 될 일이 생겨서 각 컴퓨터에 1번부터 10번까지의 번호를 부여하고,
10대의 컴퓨터가 다음과 같은 방법으로 데이터들을 처리하기로 하였다.
1번 데이터는 1번 컴퓨터, 2번 데이터는 2번 컴퓨터, 3번 데이터는 3번 컴퓨터, ... ,
10번 데이터는 10번 컴퓨터, 11번 데이터는 1번 컴퓨터, 12번 데이터는 2번 컴퓨터, ...
총 데이터의 개수는 항상 ab개의 형태로 주어진다.
재용이는 문득 마지막 데이터가 처리될 컴퓨터의 번호가 궁금해졌다. 이를 수행해주는 프로그램을 작성하라.
https://www.acmicpc.net/problem/1009
입력
입력의 첫 줄에는 테스트 케이스의 개수 T가 주어진다.
그 다음 줄부터 각각의 테스트 케이스에 대해 정수 a와 b가 주어진다. (1 ≤ a < 100, 1 ≤ b < 1,000,000)
출력
각 테스트 케이스에 대해 마지막 데이터가 처리되는 컴퓨터의 번호를 출력한다.
예제 입력
5
1 6
3 7
6 2
7 100
9 635
예제 출력
1
7
6
1
9
문제 풀이
T = int(input())
for _ in range(T):
a, b = map(int,input().split())
a %= 10
if a == 0:
print(10)
elif a in [1, 5, 6]:
print(a)
elif a in [4, 9]:
b %= 2
if b == 1:
print(a)
else:
print(a * a % 10)
else:
b %= 4
if b == 0: # b가 4일 경우, a ** 0이 되기에 추가
print(a ** 4 % 10)
else:
print(a ** b % 10)
처음엔 a^b를 10으로 나눈 나머지를 출력하는 방법으로 문제를 풀었으나, 시간 초과로 오답처리 되었습니다.
a의 1의 자리만 확인하면 몇번째 컴퓨터를 사용하는지 알 수 있기에, a^b의 규칙을 확인해보았습니다.
a¹ | a² | a³ | a⁴ | a⁵ | a⁶ | a⁷ | |
1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
2 | 2 | 4 | 8 | 6 | 2 | 4 | 8 |
3 | 3 | 9 | 7 | 1 | 3 | 9 | 7 |
4 | 4 | 6 | 4 | 6 | 4 | 6 | 4 |
5 | 5 | 5 | 5 | 5 | 5 | 5 | 5 |
6 | 6 | 6 | 6 | 6 | 6 | 6 | 6 |
7 | 7 | 9 | 3 | 1 | 7 | 9 | 3 |
8 | 8 | 4 | 2 | 6 | 8 | 4 | 2 |
9 | 9 | 1 | 9 | 1 | 9 | 1 | 9 |
10 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
규칙은 아래와 같습니다.
1. a가 10의 배수인 경우 b와 관계없이 항상 10
2. a의 1의 자리가 1,5,6인 경우 b와 관계없이 항상 a
3. a의 1의 자리가 4,9인 경우
-b가 홀수일 경우 a
-b가 짝수일 경우 6, 1
4. a의 1의 자리가 2,3,7,8인 경우 4제곱이 같은 규칙으로 반복
저처럼 파이썬을 독학하시는 분들에게 도움이 되길 바라며,
혹 더 좋은 방법이 있거나 오류가 있다면 편하게 말씀 부탁드립니다.