- toc {:toc}
๋ฌธ์
1๋ณด๋ค ํฐ ์์ฐ์ย ์ค์์ ย 1๊ณผ ์๊ธฐ ์์ ์ ์ ์ธํ ์ฝ์๊ฐ ์๋ ์์ฐ์๋ฅผ ์์๋ผ๊ณ ํ๋ค. ์๋ฅผ ๋ค์ด, 5๋ 1๊ณผ 5๋ฅผ ์ ์ธํ ์ฝ์๊ฐ ์๊ธฐ ๋๋ฌธ์ ์์์ด๋ค. ํ์ง๋ง, 6์ 6 = 2 ร 3 ์ด๊ธฐ ๋๋ฌธ์ ์์๊ฐ ์๋๋ค.
๊ณจ๋๋ฐํ์ ์ถ์ธก์ ์ ๋ช ํ ์ ์๋ก ์ ๋ฏธํด๊ฒฐ ๋ฌธ์ ๋ก, 2๋ณด๋ค ํฐ ๋ชจ๋ ์ง์๋ ๋ ์์์ ํฉ์ผ๋ก ๋ํ๋ผ ์ ์๋ค๋ ๊ฒ์ด๋ค. ์ด๋ฌํ ์๋ฅผ ๊ณจ๋๋ฐํ ์๋ผ๊ณ ํ๋ค. ๋, ์ง์๋ฅผ ๋ ์์์ ํฉ์ผ๋ก ๋ํ๋ด๋ ํํ์ ๊ทธ ์์ ๊ณจ๋๋ฐํ ํํฐ์ ์ด๋ผ๊ณ ํ๋ค. ์๋ฅผ ๋ค๋ฉด, 4 = 2 + 2, 6 = 3 + 3, 8 = 3 + 5, 10 = 5 + 5, 12 = 5 + 7, 14 = 3 + 11, 14 = 7 + 7์ด๋ค. 10000๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ย ๋ชจ๋ ์ง์ n์ ๋ํ ๊ณจ๋๋ฐํ ํํฐ์ ์ ์กด์ฌํ๋ค.
2๋ณด๋ค ํฐ ์ง์ n์ด ์ฃผ์ด์ก์ ๋, n์ ๊ณจ๋๋ฐํ ํํฐ์ ์ ์ถ๋ ฅํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค. ๋ง์ฝ ๊ฐ๋ฅํ n์ ๊ณจ๋๋ฐํ ํํฐ์ ์ด ์ฌ๋ฌ ๊ฐ์ง์ธ ๊ฒฝ์ฐ์๋ ๋ ์์์ ์ฐจ์ด๊ฐ ๊ฐ์ฅ ์์ ๊ฒ์ ์ถ๋ ฅํ๋ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์ ํ ์คํธ ์ผ์ด์ค์ ๊ฐ์ T๊ฐ ์ฃผ์ด์ง๋ค. ๊ฐ ํ ์คํธ ์ผ์ด์ค๋ ํ ์ค๋ก ์ด๋ฃจ์ด์ ธ ์๊ณ ์ง์ n์ด ์ฃผ์ด์ง๋ค.
์ถ๋ ฅ
๊ฐ ํ ์คํธ ์ผ์ด์ค์ ๋ํด์ ์ฃผ์ด์ง n์ ๊ณจ๋๋ฐํ ํํฐ์ ์ ์ถ๋ ฅํ๋ค. ์ถ๋ ฅํ๋ ์์๋ ์์ ๊ฒ๋ถํฐ ๋จผ์ ์ถ๋ ฅํ๋ฉฐ, ๊ณต๋ฐฑ์ผ๋ก ๊ตฌ๋ถํ๋ค.
์ ํ
- 4 โค n โค 10,000
์ถ์ฒ:https://www.acmicpc.net/problem/9020
ํ์ด
- ํํฐ์ ์ ์ถ๋ ฅํ๋๋ฐ ํํฐ์ ์ด ์ฌ๋ฌ ๊ฐ์ง์ธ ๊ฒฝ์ฐ์๋ ๋์์์ ์ฐจ์ด๊ฐ ๊ฐ์ฅ ์์ ๊ฒ์ ์ถ๋ ฅํ๋ค. โ ์ด๋ฅผ ์ํด์๋ N/2, ๋ฐ์ผ๋ก ๋๋ ์(gol)๋ถํฐ ์ฐพ์๋๊ฐ๊ธฐ ์์ํ๋ค.
- ๋ง์ฝ gol์ด ์์๋ผ๋ฉด N-gol์ธ ์(den)๊ฐ ์์์ฌ์ผ ํ๋ค. ๊ทธ๋ ๋ค๋ฉด ํํฐ์ ์ด ์์ฑ๋๋ค.
- ๋ง์ฝ gol์ด ์์๊ฐ ์๋๋ผ๋ฉด, den์ด ์์๊ฐ ์๋๋ผ๋ฉด gol์ ์ซ์๋ฅผ ํ๋์ฉ ๋ฎ์ถฐ์ค๋ค.
#include <iostream>
// ๊ณจ๋๋ฐํ์ ์ถ์ธก
// ์ค์์์๋ถํฐ ์ฐพ์๊ฐ๋ ๋ฐฉ์. ex) 10 -> 5+5
using namespace std;
bool is_prime(int n);
int main()
{
int T, n, gol, den;
cin >> T;
for(int i=0; i<T; i++)
{
cin >> n;
gol = n/2;
while(true)
{
if(is_prime(gol))
{
den = n-gol;
if(is_prime(den))
{
cout << gol << " " << den << endl;
break;
}
else
{
gol--;
}
}
else
{
gol--;
}
}
}
return 0;
}
bool is_prime(int n)
{
int i = 2;
for(i; i*i<=n; i++)
{
if(n%i==0)
return false;
}
return true;
}