Xét một phương trình có dạng như sau: x + y + z = n ( n là một số nguyên dương ). Phương trình này có thể có vô số nghiệm. Tuy nhiên ở đây ta chỉ quan tâm các nghiệm (x,y,z) mà x,y,z là các số nguyên tố. Yêu cầu: Cho số nguyên dương N, hãy tìm tất cả các nghiệm (x,y,z) trong đó x < y < z. INPUT: Một dòng duy nhất ghi một số nguyên dương N ( N < 5000 ). OUTPUT: Gồm N dòng, dòng thứ i cho biết bộ nghiệm (x,y,z) thứ i tìm được. Nếu phương trình không có nghiệm nào thì in ra -1. Ví dụ input 5 output -1 input 8 output 2 3 3
1 câu trả lời
#include<bits/stdc++.h>
using namespace std;
void Sieve(int n,bool prime[])
{
memset(prime,true,n+1);
prime[0] = false;
prime[1] = false;
int sqrtn = trunc(sqrt(n));
for(int i=2;i<=sqrtn;i++)
{
if (prime[i]==true)
{
for(int j=i;j<=trunc(n/i);j++)
{
prime[i*j] = false;
}
}
}
}
int main()
{
int n,i,j;cin >> n;
bool prime[n+1];
bool kt=false;
Sieve(n,prime);
for (i=2;i<=n;i++)
{
if(prime[i]==true)
for(j=i;j<=n-i;j++)
if(prime[j]==true && prime[n-i-j]==true)
if(n-i-j>=j && j>=i)
{
printf("%d %d %d\n",i,j,n-i-j);
kt=true;
}
}
if(kt==false)
cout<<"-1";
return 0;
}
Câu hỏi trong lớp
Xem thêm