알고리즘(백준 등) 공부

SWEA 16002. 합성수 방정식

posite 2026. 5. 5. 15:22

차이가 n인 두 합성수를 찾는 문제이다. 합성수는 1과 자신이 아닌 약수가 존재하는 수 이며, n<=10^7 이다.

 

자연수인 합성수는 4 이상이며, 차이가 n인 수를 찾아야 하므로 4+n부터 순차적으로 i, i-n이 모두 합성수이면 차이가 n인 합성수를 찾게 된다.

private static boolean isNotPrimeNumber(int n) {
    for(int i=2; i<=Math.sqrt(n); i++) {
        if(n % i == 0) return true;
    }
    return false;
}
for(int i = n+4; i <= 1_000_000_000; i++) {
    if(isNotPrimeNumber(i) && isNotPrimeNumber(i-n)) {
        sb.append(i).append(" ").append(i-n).append('\n');
        break;
    }
}

 

 

결과 코드는 다음과 같다.

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Solution {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int T = Integer.parseInt(br.readLine());
        StringBuilder sb = new StringBuilder();

        for (int tc = 1; tc <= T; tc++) {
            sb.append('#').append(tc).append(' ');
            int n = Integer.parseInt(br.readLine());
            for(int i = n+4; i <= 1_000_000_000; i++) {
                if(isNotPrimeNumber(i) && isNotPrimeNumber(i-n)) {
                    sb.append(i).append(" ").append(i-n).append('\n');
                    break;
                }
            }
        }
        
        br.close();
        System.out.print(sb);
    }
    
    private static boolean isNotPrimeNumber(int n) {
        for(int i=2; i<=Math.sqrt(n); i++) {
            if(n % i == 0) return true;
        }
        return false;
    }
}