import sys def prime_num(num): sieve = [True]*num sieve[1] = False m = int(num**0.5) + 1 for i in range(2, m): if sieve[i] == True: for j in range(i+i, num, i): sieve[j] = False return sieve prime_list = prime_num(10001) for t in range(int(input())): N = int(sys.stdin.readline()) for number in range(N//2,0,-1): other_number = N - number if prime_list[other_number] and prime_list[number]: print(number,other_number) break
골드바흐의 추측 문제이다. 정수론에 관련된 문제로 소수를 구해서, 소수를 더해서 나오는 경우를 구하는데 그 중 두 소수의 차이가 작은 소수를 구하는 것이다.
구하는 방법은 다음과 같다. 먼저 나올 수 있는 경우가 1~10000이니깐, 1~10000 사이의 소수들을 전부 구해준다.
그리고 난뒤 두 소수 차이가 가장 적은 경우를 구하는 경우이니깐 주어진 수 N의 절반인 N//2 부터 시작해서 0까지 반복을 하면서, 두 수가 전부 소수인 경우를 구해주면 된다.
'알고리즘 > 백준' 카테고리의 다른 글
[BOJ/백준] 11047 동전 0 (0) | 2021.02.15 |
---|---|
[BOJ/백준] 13549 숨바꼭질 3 (0) | 2021.02.13 |
[BOJ/백준] 1107 리모컨 (0) | 2021.02.13 |
[BOJ/백준] 15591 MooTube(Silver) (0) | 2021.02.13 |
[BOJ/백준] 1987 알파벳 (0) | 2021.02.03 |