티스토리 뷰

import java.io.*;
import java.util.*;

class Main {
public static void main(String[] args) throws IOException {
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
final int max = 1000000;
//6부터 1000000 까지의 소수 구해두기
int[] primes = new int[max];
int count = 0;
boolean[] isCleared = new boolean[max + 1];
for(int i=2; i<=max; ++i) {
if(!isCleared[i]) {
primes[count++] = i;
for(int j=i * 2; j<=1000000; j+=i) {
isCleared[j] = true;
}
}
}
int input = Integer.parseInt(in.readLine());
while(input != 0) {
if(input == 0) break;
for(int i=1; i<count; ++i) {
if(isCleared[input - primes[i]] == false) {
System.out.printf("%d = %d + %d\n", input, primes[i], input - primes[i]);
break;
}
}
input = Integer.parseInt(in.readLine());
}
}
}


일단 에라토스테네스의 체 알고리즘을 사용하여 소수를 쫙 구해놓는다.


그 다음 주어진 수에 대하여 1부터 탐색하여 소수의 합으로 표현되는지 찾아야 한다.




let max = 1000000

var primes = [Int]()

var isCleared = Array(repeating: false, count: max + 1)

for i in 2...max {

    if !isCleared[i] {

        primes.append(i)

        for j in stride(from: i * 2, through: max, by: i) {

            isCleared[j] = true

        }

    }

}

var input = Int(readLine()!)!

let count = primes.count

while input != 0 {

    if input == 0 { break }

    for i in 1..<count {

        if !isCleared[input - primes[i]] {

            print("\(input) = \(primes[i]) + \(input - primes[i])")

            break

        }

    }

    input = Int(readLine()!)!

}



'Algorithm > Baekjoon Online Judge' 카테고리의 다른 글

10872번 '팩토리얼'  (0) 2018.08.01
11653번 '소인수분해'  (0) 2018.08.01
1929번 '소수 구하기'  (0) 2018.08.01
11576번 'Base Conversion'  (0) 2018.08.01
2089번 '-2진수'  (0) 2018.08.01
댓글
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2025/03   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31
글 보관함