Trong một bức thư mà Christian Goldbach gửi cho Euler, ông đã đề cập đến phỏng đoán của mình: Mọi số tự nhiên chẵn lớn hơn 2 đều là tổng của 2 số nguyên tố. - Yêu cầu: Hãy lập chương trình để kiểm chứng phỏng đoán của Goldbach. - Dữ liệu vào: từ file GB.INP ghi số tự nhiên chẵn lớn hơn 2 (<32000) - Dữ liệu ra: ghi ra file GB.OUT gồm 2 số nguyên tố ( trên 1 dòng, số nhỏ bên trái số lớn bên phải) cách nhau ít nhất 1 dấu cách có tổng bằng số đã cho (hoặc không tìm được – ghi là “khong”). (Lập trình C++)

2 câu trả lời

#include <bits/stdc++.h>
#define ll long long
#define faster ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
using namespace std;
ll n;
bool prime(ll a) {
    if(a <= 1)
        return false;
    for(int i = 2; i * i <= a; i++)
        if(a % i == 0)
            return false;
        return true;
}
int main()
{
    faster;
    cin >> n;
    if (prime(n - 3)) 
        cout << 3 << " " << n - 3 << endl;
    else if (prime(n - 5)) 
        cout << 5 << " " << n - 5 << endl;
    else
    for (int i = 7; i <= n/2; i++)
        if (prime(i) && prime(n - i)){
    cout << i << " " << n - i << endl; 
        break;
    }
}

#include<bits/stdc++.h>
using namespace std;
long long ktr(long long n)
{
 if (n<=1) return false;
 if (n<=3) return true;
 if (n%2==0||n%3==0) return false;
 for (int i=5;i*i<=n;i+=6)
 {
     if(n%i==0||n%(i+2)==0)
        return false;
 }
 return true;
}
int main()
{
    int n;
 cin>>n;
 if (n<4) cout<<"khong";
 else
 if (ktr(n-3)) cout<<3<<" "<<n-3<<endl;
 else if (ktr(n-5)) cout<<5<<" "<<n-5<<endl;
 else
 for (int i=7;i<=n/2;i++)
 {
  if (ktr(i)&&ktr(n-i)) 
  {
   cout<<i<<" "<<n-i<<endl;break;
  }
 }   
}