백준

백준 2526 싸이클(Java)

Park DJ 2023. 1. 18. 04:27

https://www.acmicpc.net/problem/2526

 

2526번: 싸이클

두 자연수 N과 P를 가지고  다음 과정을 거쳐서 나오는 수를 차례대로 출력해보자. 처음 출력하는 수는 N이고, 두 번째 이후 출력하는 수는 N을 곱하고 P로 나눈 나머지를 구하는 과정을 반복하여

www.acmicpc.net


 

해석 및 팁

 


 

이문제에서 n 과 p 를 입력받았을때 나머지의 개수는 최대 p-1개 이므로 크키가 p인 배열을 생성한 후 반복문을 통해 나머지의 값에 해당하는 배열의 값을 증가시킵니다. 그리고 마지막에 중복된 숫자들의 개수를 세어서 출력해주면 됩니다. 

 


 

Java 코드

 


import java.util.Scanner;

public class Main {
  public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);

    int n = sc.nextInt();
    int p = sc.nextInt();
    int[] arr = new int[p];       //나머지의 개수는 최대 p-1 개
    int count = 0;
    int num = n;

    while(true) {
      num = num * n % p;
      arr[num]++;
      if(arr[num] == 3) break;
    }

    for(int i=0; i<p; i++) {
      if(arr[i] > 1) count++;      //중복되면 count++
    }
    System.out.println(count);
  }
}