https://www.acmicpc.net/problem/6588
๋ฌธ์
1742๋ , ๋ ์ผ์ ์๋ง์ถ์ด ์ํ๊ฐ ํฌ๋ฆฌ์คํฐ์ ๊ณจ๋๋ฐํ๋ ๋ ์จํ๋ฅดํธ ์ค์ผ๋ฌ์๊ฒ ๋ค์๊ณผ ๊ฐ์ ์ถ์ธก์ ์ ์ํ๋ ํธ์ง๋ฅผ ๋ณด๋๋ค.
4๋ณด๋ค ํฐ ๋ชจ๋ ์ง์๋ ๋ ํ์ ์์์ ํฉ์ผ๋ก ๋ํ๋ผ ์ ์๋ค.
์๋ฅผ ๋ค์ด 8์ 3 + 5๋ก ๋ํ๋ผ ์ ์๊ณ , 3๊ณผ 5๋ ๋ชจ๋ ํ์์ธ ์์์ด๋ค. ๋, 20 = 3 + 17 = 7 + 13, 42 = 5 + 37 = 11 + 31 = 13 + 29 = 19 + 23 ์ด๋ค.
์ด ์ถ์ธก์ ์์ง๋ ํด๊ฒฐ๋์ง ์์ ๋ฌธ์ ์ด๋ค.
๋ฐฑ๋ง ์ดํ์ ๋ชจ๋ ์ง์์ ๋ํด์, ์ด ์ถ์ธก์ ๊ฒ์ฆํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
์ ๋ ฅ
์ ๋ ฅ์ ํ๋ ๋๋ ๊ทธ ์ด์์ ํ ์คํธ ์ผ์ด์ค๋ก ์ด๋ฃจ์ด์ ธ ์๋ค. ํ ์คํธ ์ผ์ด์ค์ ๊ฐ์๋ 100,000๊ฐ๋ฅผ ๋์ง ์๋๋ค.
๊ฐ ํ ์คํธ ์ผ์ด์ค๋ ์ง์ ์ ์ n ํ๋๋ก ์ด๋ฃจ์ด์ ธ ์๋ค. (6 ≤ n ≤ 1000000)
์ ๋ ฅ์ ๋ง์ง๋ง ์ค์๋ 0์ด ํ๋ ์ฃผ์ด์ง๋ค.
์ถ๋ ฅ
๊ฐ ํ ์คํธ ์ผ์ด์ค์ ๋ํด์, n = a + b ํํ๋ก ์ถ๋ ฅํ๋ค. ์ด๋, a์ b๋ ํ์ ์์์ด๋ค. ์ซ์์ ์ฐ์ฐ์๋ ๊ณต๋ฐฑ ํ๋๋ก ๊ตฌ๋ถ๋์ด์ ธ ์๋ค. ๋ง์ฝ, n์ ๋ง๋ค ์ ์๋ ๋ฐฉ๋ฒ์ด ์ฌ๋ฌ ๊ฐ์ง๋ผ๋ฉด, b-a๊ฐ ๊ฐ์ฅ ํฐ ๊ฒ์ ์ถ๋ ฅํ๋ค. ๋, ๋ ํ์ ์์์ ํฉ์ผ๋ก n์ ๋ํ๋ผ ์ ์๋ ๊ฒฝ์ฐ์๋ "Goldbach's conjecture is wrong."์ ์ถ๋ ฅํ๋ค.
ํ์ด
์๋ผํ ์คํ ๋ค์ค์ ์ฒด๋ฅผ ์ด์ฉํด ์์๋ค์ ๋ฏธ๋ฆฌ ๊ตฌํด๋๊ณ
์์ ์์๋ถํฐ n์์ ๋บ ๊ฐ๋ ์์๋ผ๋ฉด ์ถ๋ ฅํ๋ค.
// Authored by : seondal
// Co-authored by : -
// #include <bits/stdc++.h>
#include <iostream>
#include <vector>
using namespace std;
void findPrime(vector<bool> &isPrime) {
isPrime[0] = isPrime[1] = false;
for(int i=2; i<=1000000; i++) {
for(int j=i+i; j<=1000000; j+=i) {
isPrime[j] = false;
}
}
}
int main() {
ios_base :: sync_with_stdio(false);
cin.tie(NULL); cout.tie(NULL);
vector<bool> isPrime(1000001, true);
findPrime(isPrime);
int n;
while(true) {
cin >> n;
if(n==0) break;
for(int i=3; i<n; i++) {
if(isPrime[i] && isPrime[n-i]) {
cout << n << " = " << i << " + " << n-i << "\n";
break;
}
}
}
return 0;
}
/*
*/
'๐๏ธ ICPC Sinchon > Basic Math' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[BOJ][C++] ๋ฐฑ์ค 1850๋ฒ: ์ต๋๊ณต์ฝ์ (0) | 2023.01.24 |
---|---|
[BOJ S5][C++] ๋ฐฑ์ค 14490๋ฒ: ๋ฐฑ๋์ด (0) | 2022.09.19 |
[BOJ][C++] ๋ฐฑ์ค 2609๋ฒ : ์ต๋๊ณต์ฝ์์ ์ต์๊ณต๋ฐฐ์ (0) | 2022.09.14 |
[BOJ][C++] ๋ฐฑ์ค 2960๋ฒ: ์๋ผํ ์คํ ๋ค์ค์ ์ฒด (0) | 2022.09.14 |
[BOJ][C++] ๋ฐฑ์ค 9613๋ฒ : GCD ํฉ (0) | 2022.09.14 |