728x90
๐ ๋ฌธ์
[๋ฌธ์ ์์ฝ]
n = a + b (a, b -> ํ์ ์์)
- ๊ฒฝ์ฐ์ ์๊ฐ ์ฌ๋ฌ๊ฐ์ง: b - a ๊ฐ ๊ฐ์ฅ ํฐ ๊ฒ
- ์์ผ๋ฉด : "Goldbach's conjecture is wrong." ์ถ๋ ฅ
๐ ์ ๊ทผ ๋ฐฉ๋ฒ
- ์์๋ฅผ ์๋ผํ ์คํ ๋ค์ค์ ์ฒด๋ฅผ ์ด์ฉํด์ ๋ฏธ๋ฆฌ ๋ฐฐ์ด์ ๊ตฌํด๋๋๋ค.
- b - a๊ฐ ๊ฐ์ฅ ํฐ ๊ฒ (= a๊ฐ ์์ ๊ฒ)
์ด๋ฏ๋ก a๋ฅผ 3 ์์๋ถํฐ n / 2๊น์ง ์ฌ๋ผ๊ฐ๋ฉด์ ๊ตฌํ๋ค.
(2๋ ์์์ด์ง๋ง ๋ฌธ์ ์์ ํ์ ์์๋ผ๊ณ ํ์ผ๋ฏ๋ก..., ๊ฐ์ ์๋ฏธ๋ก a๋ ํ์๋ง ๊ฒ์ฌํ๋ค.) - a, b๊ฐ ๋ ๋ค ์์์ผ ๊ฒฝ์ฐ์ n = a + b๋ฅผ ์ถ๋ ฅํ๊ณ , found ํ๋๊ทธ๋ฅผ ์ฐธ์ผ๋ก ํ ํ ํด๋น ๋ฐ๋ณต๋ฌธ์์ ๋น ์ ธ๋์จ๋ค.
- ๋ฐ๋ณต๋ฌธ์ ๋ค ๋ ์ดํ์ found ํ๋๊ทธ๊ฐ false ์ผ ๊ฒฝ์ฐ "Goldbach's conjecture is wrong." ๋ฅผ ์ถ๋ ฅํ๋ค.
๐ ํด๊ฒฐ ์ฝ๋
#include <iostream>
#include <vector>
#define MAX 1000000
using namespace std;
vector<bool> isPrime(MAX + 1, true);
void sieve() {
isPrime[0] = isPrime[1] = false;
for (int i = 2; i * i <= MAX; i++) {
if (isPrime[i]) {
for (int j = i + i; j <= MAX; j += i) {
isPrime[j] = false;
}
}
}
}
int main(void) {
ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
sieve();
while (true) {
int n; cin >> n;
if (n == 0) break;
bool found = false;
for (int a = 3; a <= n / 2; a += 2) {
int b = n - a;
if (isPrime[a] && isPrime[b]) {
cout << n << " = " << a << " + " << b << '\n';
found = true;
break;
}
}
if (!found) {
cout << "Goldbach's conjecture is wrong." << '\n';
}
}
}
โ ๏ธ ํ๋ฆฌ๊ฑฐ๋ ์๊ฐ์ด ์ค๋ ๊ฑธ๋ฆฐ ์ด์
์ข ๋ง์ด ํ๋ ธ๋๋ฐ..
๊ทธ๋ฅ ์ต๊ด์ ์ผ๋ก ์๋ผํ ์คํ ๋ค์ค์ ์ฒด๊ฐ ์๋๋ผ isPrime ํจ์๋ก ๋งค๋ฒ ์์๊ฐ ๋ง๋์ง ํ์ธํ๋ ๋ฐฉ์์ผ๋ก ์ง์ ์๊ฐ ์ด๊ณผ๊ฐ ๋ฌ๋ค
์์์ธ์ง ํ๋ณํด์ผ ํ๋ ๋์์ด ๋ง์ ๋์๋ ์๋ผํ ์คํ ๋ค์ค์ ์ฒด ์ฌ์ฉํ๊ธฐ...~
๐ ๋ฐฐ์ด ์
- ์๋ผํ ์คํ ๋ค์ค์ ์ฒด
728x90
'๐ฉโ๐ป ์๊ณ ๋ฆฌ์ฆ > ๋ฌธ์ ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[BOJ/13904/C++] ๊ณผ์ (0) | 2025.06.26 |
---|---|
[BOJ/5430/C++] AC (0) | 2025.06.25 |
[BOJ/1780/C++] ์ข ์ด์ ๊ฐ์ (2) | 2025.06.20 |
[BOJ/2599/C++] ์์ด (0) | 2025.05.29 |
[BOJ/11478/C++] ์๋ก ๋ค๋ฅธ ๋ถ๋ถ ๋ฌธ์์ด์ ๊ฐ์ (0) | 2025.05.14 |