본문 바로가기
Problem Solving/Baekjoon

[백준] 1837 암호제작 - Brute Force / Java

by graycode 2024. 3. 28.

 문제 링크

 

1837번: 암호제작

원룡이는 한 컴퓨터 보안 회사에서 일을 하고 있다. 그러던 도중, 원룡이는 YESWOA.COM 으로부터 홈페이지 유저들의 비밀키를 만들라는 지시를 받았다. 원룡이는 비밀 키를 다음과 같은 방법으로

www.acmicpc.net

 

 풀이 코드

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.math.BigInteger;
import java.util.StringTokenizer;

public class Main {

    static boolean[] nonPrime = new boolean[1000001];

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

        sieve();

        StringTokenizer st = new StringTokenizer(br.readLine());
        int n = verify(new BigInteger(st.nextToken()), Integer.parseInt(st.nextToken()));

        bw.write(n == -1 ? "GOOD" : "BAD " + n);
        bw.flush();
    }

    private static int verify(BigInteger p, int k) {
        for (int i = 2; i < k; i++)
            if (!nonPrime[i] && p.mod(BigInteger.valueOf(i)).equals(BigInteger.ZERO)) return i;

        return -1;
    }

    private static void sieve() {
        double sqrt = Math.sqrt(nonPrime.length);
        for (int i = 2; i < sqrt; i++)
            if (!nonPrime[i]) for (int j = i * i; j < nonPrime.length; j += i) nonPrime[j] = true;
    }

}

댓글