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;
}
}
}