반응형
출처: https://www.acmicpc.net/problem/2526
Input
67 31
Output
3
연산과정에서 동일한 숫자가 나오는 시점에서 그 이후로는 사이클에 포함되어 있습니다.
『67』 → 『25』 → 『1』 → 『5』 → 『25』가 두 번 나타났으므로 이후로는 사이클이 진행됩니다.
이때, 중복되지 않은 숫자의 개수 = (연산과정에서) 중복된 숫자가 두번째 나타난 순서 - 처음 나타난 순서입니다.
『25』가 중복해서 나타는 순서는 5번째와 2번째 이므로 ▶5 - 2 = 3개
#include <stdio.h>
const int MAX_N = 1000;
int visited[MAX_N];
int num, N, P, ans;
int main() {
// freopen("input.txt", "r", stdin);
scanf("%d %d", &N, &P);
int cnt = 1;
num = N;
visited[num] = cnt;
while (true) {
num = (num * N) % P;
cnt++;
if (visited[num]) {
ans = cnt - visited[num];
break;
}
visited[num] = cnt;
}
printf("%d\n", ans);
}
반응형
'PS 문제 풀이 > Baekjoon' 카테고리의 다른 글
[BOJ] 백준 10801 카드게임 (0) | 2021.02.17 |
---|---|
[BOJ] 백준 10798 세로읽기 (0) | 2021.02.17 |
[BOJ] 백준 2567 색종이 - 2 (0) | 2021.02.17 |
[BOJ] 백준 7575 바이러스 (0) | 2021.02.17 |
[BOJ] 백준 10840 구간성분 (0) | 2021.02.17 |
댓글