백준/Java

[백준 자바] 7789번(텔레프라임) - 소수 판정

gamzaggang7 2024. 6. 24. 15:04
728x90

난이도 - 브론즈 2

문제

소수를 매우 좋아하는 수학자가 있다. 이 수학자는 매번 전화번호를 받을 때 마다, 그 전화번호가 소수인지 아닌지를 검사한다. 수학자는 자신의 모든 친구의 전화번호가 소수인지 아닌지를 기억하고 있다.

계속해서 늘어나는 휴대전화 인구의 급증에 따라 정부는 한 자리를 기존 번호 앞에 붙이는 정책을 시행하기로 했다.

수학자는 큰 고민에 빠졌다. 소수 전화번호를 가지고 있는 친구의 전화번호가 이제 평범한 숫자가 될 수도 있기 때문이다.

수학자의 친구 중 한 사람의 원래 전화번호와 새로이 앞에 붙는 번호 한 자리가 주어졌을 때, 원래 전화번호와 새로운 전화번호가 모두 소수인지 아닌지를 구하는 프로그램을 작성하시오.

입력

첫째 줄에 여섯 자리의 기존 전화번호와 새로 추가되는 한 자리 번호가 주어진다. 기존 전화번호는 0으로 시작하지 않으며, 새로 추가되는 한 자리 번호는 0이 아니다.

출력

원래 전화번호와 새로운 전화번호가 소수이면 Yes를, 아니면 No를 출력한다.

 


 

728x90
import java.io.*;
import java.util.StringTokenizer;

public class Main7789 {
  public static void main(String[] args) throws Exception {
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

    StringTokenizer st = new StringTokenizer(br.readLine(), " ");
    int phoneNum = Integer.parseInt(st.nextToken());
    int add = Integer.parseInt(st.nextToken());

    if (!isPrime(phoneNum))
      bw.write("No");
    else {
      int newNum = add * 1000000 + phoneNum;

      if (isPrime(newNum))
        bw.write("Yes");
      else
        bw.write("No");
    }

    bw.flush();
    br.close();
    bw.close();
  }

  static boolean isPrime(int n) {
    if (n % 2 == 0 || n % 3 == 0)
      return false;

    for (int i = 5; i * i <= n; i += 6) {
      if (n % i == 0 || n % (i + 2) == 0)
        return false;
    }
    return true;
  }
}
728x90