Số số nguyên tố nhỏ nhất có tổng bằng N
2017-07-21Bài gốc
Đề bài
Cho số nguyên N > 0, tìm số số nguyên tố nhỏ nhất có tổng bằng N.
Giới hạn:
- 2 ≤ n ≤ 2·109
Định dạng test
Input:
- Một dòng duy nhất là số N.
Output:
- Số số nguyên tố nhỏ nhất có tổng bằng N.
Ví dụ:
(27 = 2 + 2 + 23)
Thuật toán
Với N = 1, bài toán không có lời giải.
Nếu N là số nguyên tố, cách phân tích tối ưu là N = N, đáp số là 1.
Nếu N chẵn và N > 2, theo giả thuyết Goldbach: có thể biểu diễn N thành tổng của hai số nguyên tố, điều này được chứng minh đúng với N ≤ 4·1018.
Nếu N lẻ:
- Các số nguyên tố > 2 là số lẻ, tổng của các số lẻ là số chẵn => trong cách phân tích N thành tổng các số nguyên tố, phải có một số nguyên tố chẵn, mà 2 là số nguyên tố chẵn duy nhất => N = 2 + (N-2). Đến đây, nếu (N-2) là số nguyên tố, thì đáp số là 2. Ngược lại:
- Phân tích N = 3 + (N-3), N-3 là một số chẵn, lại theo giả thuyết Goldbach, N-3 là tổng của 2 số nguyên tố => kết quả là 3.
Source code
Ngôn ngữ: C++.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
bool isPrime(int x) {
if (x == 1) return false;
if (x == 2 || x == 3) return true;
if (x % 2 == 0 || x % 3 == 0) return false;
for(int i = 3; i <= sqrt(x); i += 2)
if (x % i == 0) return false;
return true;
}
int main() {
ios::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
int n; cin >> n;
if (isPrime(n)) cout << 1;
else if (n % 2 == 0) cout << 2;
else if (isPrime(n-2)) cout << 2;
else cout << 3;
return 0;
}
Độ phức tạp
O(√n)