728x90
#include<stdio.h>
int main()
{
int T = 0; //Test T
int n = 0; // 골드바흐 파티션 n
int i = 0;
int j = 0;
int decimal[10001] = { 0, }; //소수일 경우 0
decimal[0] = 1, decimal[1] = 1;
for (j = 2; j < 10001 / j; j++) //베르트랑 공준 참고
{
if (decimal[j] == 1) continue; //소수가 아니면 통과
for (i = j * j; i < 10001; i += j)
{
if (i % j == 0) decimal[i] = 1;
}
}
scanf("%d", &T);
for (i = 0; i < T; i++)
{
scanf("%d", &n);
for (j = n / 2; j > 0; j--) //반으로 쪼개서 가장 가까운값 구하기
{
if (decimal[j] == 0 && decimal[n - j] == 0) // 둘다 소수일때만
{
printf("%d %d\n", j, n - j);
break;
}
}
}
}
/*
ex)n=10
j=5;j>0;j--
5소수
10-5=5 소수
5 5 출력됨
ex)n=18
j=9;j>0;j--
9소수 아님
8소수 아님
7소수
18-7=11 소수
7과 11이 출력됨
*/
처음 배열을 선언해서 앞의 베르트랑 공준에서 썻었던 소수 판별방식을 이용 후에 Test T값을 입력 받고
그 만큼 n값을 입력받고 n값의 골드바흐 파티션을 출력했다.
계속 출력에러가 떠서 한 블로그를 참고 후 코드를 줄여서 완성했다.
'백준 코딩테스트 > 9.수학 2' 카테고리의 다른 글
백준 3009) 네 번째 점 (c) (0) | 2020.11.03 |
---|---|
백준 1085) 직사각형에서 탈출 (c) (0) | 2020.10.28 |
백준 4948) 베르트랑 공준 (c) (0) | 2020.10.22 |
백준 1929) 소수 구하기 (c) (0) | 2020.10.21 |
백준 2581) 소수 (c) (0) | 2020.10.15 |