백준
1009)분산처리
포도몽2
2019. 3. 16. 09:37
https://www.acmicpc.net/problem/1009
정수 a와 b가 주어지면 1~a^b까지의 수를 1번부터 10번 컴퓨터로 보내야 한다.
공교롭게도 b의 크기가 최대 1000000이어서 직접 수를 구해 컴퓨터에 집어넣는다는 생각은 접어야 한다.
그러나 a를 b번 곱하더라도 일의 자리 한 자리만 생각한다면 수가 너무 커지는 것을 걱정할 필요가 없다.
예를들어 9를 625번 곱하는 경우를 생각해보자.
9 * (9*9*...*9)에서 오른쪽 그룹에 있는 9를 하나 가져와 왼쪽의 9와 곱한다.
그러면 81 * (9*9*...*9)가 되는데 일의 자리 한 자리만 생각해서 1 * (9*9*...*9)로 봐도 문제가 없다.
어차피 컴퓨터가 10대 있기 때문에 일의 자리가 n인 것들은 n번 컴퓨터로 보내기 때문이다.
그래서 mult를 1로 초기화하고 mult = (mult * a)%10를 b번 반복한 후 mult를 출력하면 된다.
컴퓨터는 1~10번까지 있기 때문에 mult를 반복 연산후 얻게되는 0은 10이라 간주해야 한다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | #include<iostream> using namespace std; int main() { int n; int a, b; cin >> n; for (int i = 0; i < n;i++) { cin >> a >> b; int mult = 1; for (int j = 1; j <= b;j++) { mult = (mult*a) % 10; } if(mult!=0) cout << mult<<endl; else cout << 10 << endl; } return 0; } | cs |