본문 바로가기
백준 코딩테스트/9.수학 2

백준 9020) 골드바흐의 추측 (c)

by xortl98 2020. 10. 28.
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값의 골드바흐 파티션을 출력했다. 

 

계속 출력에러가 떠서 한 블로그를 참고 후 코드를 줄여서 완성했다.