본문 바로가기

백준

1009)분산처리

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!=0cout << mult<<endl;
        else cout << 10 << endl;
    }
 
    return 0;
}
cs


'백준' 카테고리의 다른 글

1260)DFS와 BFS  (0) 2019.03.16
1012)유기농 배추2(DFS)  (0) 2019.03.16
3208)배고픈 애벌레  (0) 2019.03.15
1373)2진수 8진수  (0) 2019.03.11
1158)조세퍼스 문제  (0) 2019.03.04