Bài tập khó bác nào cùng vào xẻ chơi :))
Cho số nguyên dương N lớn hơn hoặc bằng 8. Hãy phân tích N thành tổng của 4 số nguyên tố, các cách phân tích là hoán vị của nhau được xem là một.
- Yêu cầu : Xác định tất cả các cách phân tích N như trên.
- Dữ liệu vào : Từ tập tin văn bản PHANTICH.INP. Gồm 1 dòng duy nhất chứa số nguyên dương N
- Dữ liệu ra : Ghi ra tập tin văn bản PHANTICH.OUT Gồm M + 1 dòng . Trong đó :
- Dòng đầu tiên là số nguyên dương M : M là số cách phân tích N thành tổng của 4 số nguyên tố.
- M dòng tiếp theo là các kết quả phân tích số N thành tổng 4 số nguyên tố.
Ví dụ :
Dưới đây là code của mình viết nhưng mà hình như bị lỗi chỗ nào ấy
#include <iostream>
#include <fstream>
#include <math.h>
using namespace std;
int main ()
{
int N, M, i, j, o, p,CheckSNT, X, X2, Tong;
int Sohang[4], SoNguyenTo[X];
X = 2; M = 0;
Tong = 0;
ifstream PhanTich ("phantich.txt");
if(! PhanTich.is_open())
{
cout << "Khong tim thay file \n ...";
return 0;
}
PhanTich >> N;
PhanTich.close();
cout << "Da doc du lieu \n";
ofstream PhanTich2 ("ketqua.txt");
PhanTich2 << "Ket qua : \n";
SoNguyenTo[1] = 2;
SoNguyenTo[2] = 3;
for (int i = 2; i <= N; i++)
{
for(int j = 2; j <= sqrt((float)i); j++)
{
if(i%j == 0)
{
CheckSNT = 1;
break;
}
else
{
CheckSNT = 2;
}
}
if(CheckSNT != 1)
{
X++;
SoNguyenTo[X] = i;
}
}
for ( int i = 1; i <= X; i++)
{
cout << SoNguyenTo[i] << endl;
}
// TH 1 : 4 so giong nhau
for(int i = 1; i <= X; i++)
{
Sohang[1] = SoNguyenTo[i];
Sohang[2] = SoNguyenTo[i];
Sohang[3] = SoNguyenTo[i];
Sohang[4] = SoNguyenTo[i];
Tong = Sohang[1] + Sohang[2] + Sohang[3] + Sohang[4];
if(Tong == N)
{
M++;
PhanTich2 << N << " = " << Sohang[1] << " + " << Sohang[2] << " + " << Sohang[3] << " + " << Sohang[4] << endl;
cout << N << " = " << Sohang[1] << " + " << Sohang[2] << " + " << Sohang[3] << " + " << Sohang[4] << endl;
}
}
// TH 2 : 3 so giong nhau 1 so khac
for(int i = 1; i <= X; i++)
{
Sohang[1] = SoNguyenTo[i];
Sohang[2] = SoNguyenTo[i];
Sohang[3] = SoNguyenTo[i];
for (int j = 1; j <= X; j++)
{
Sohang[4] = SoNguyenTo[j];
Tong = Sohang[1] + Sohang[2] + Sohang[3] + Sohang[4];
if(Tong == N)
{
M++;
PhanTich2 << N << " = " << Sohang[1] << " + " << Sohang[2] << " + " << Sohang[3] << " + " << Sohang[4] << endl;
cout << N << " = " << Sohang[1] << " + " << Sohang[2] << " + " << Sohang[3] << " + " << Sohang[4] << endl;
}
}
}
// TH 3 : 2 so giong nhau 1 va 2 so giong nhau 2
for(int i = 1; i <= X; i++)
{
Sohang[1] = SoNguyenTo[i];
Sohang[2] = SoNguyenTo[i];
for (int j = 2; j <= X; j++)
{
Sohang[3] = SoNguyenTo[j];
Sohang[4] = SoNguyenTo[j];
Tong = Sohang[1] + Sohang[2] + Sohang[3] + Sohang[4];
if(Tong == N)
{
M++;
PhanTich2 << N << " = " << Sohang[1] << " + " << Sohang[2] << " + " << Sohang[3] << " + " << Sohang[4] << endl;
cout << N << " = " << Sohang[1] << " + " << Sohang[2] << " + " << Sohang[3] << " + " << Sohang[4] << "\n";
break;
}
}
}
// TH 4 : 2 so giong nhau
for(int i = 1; i <= X; i++)
{
Sohang[1] = SoNguyenTo[i];
Sohang[1] = SoNguyenTo[i];
for (int j = 1 + i; j <= X; j++)
{
Sohang[3] = SoNguyenTo[j];
for (int o = 1 + j; o <= X; o++)
{
Sohang[4] = SoNguyenTo[o];
Tong = Sohang[1] + Sohang[2] + Sohang[3] + Sohang[4];
if(Tong == N)
{
M++;
PhanTich2 << N << " = " << Sohang[1] << " + " << Sohang[2] << " + " << Sohang[3] << " + " << Sohang[4] << endl;
cout << N << " = " << Sohang[1] << " + " << Sohang[2] << " + " << Sohang[3] << " + " << Sohang[4] << endl;
break;
}
}
}
}
// TH : 4 so khac nhau
for(int i = 1; i <= X; i++)
{
Sohang[1] = SoNguyenTo[i];
for (int p = 1 + i; p <= X; p++ )
{
Sohang[2] = SoNguyenTo[p];
for (int j = 1 + p; j <= X; j++)
{
Sohang[3] = SoNguyenTo[j];
for(int o = 1 + j; o <= X; o++)
{
Sohang[4] = SoNguyenTo[o];
Tong = Sohang[1] + Sohang[2] + Sohang[3] + Sohang[4];
if(Tong == N)
{
M++;
PhanTich2 << N << " = " << Sohang[1] << " + " << Sohang[2] << " + " << Sohang[3] << " + " << Sohang[4] << endl;
cout << N << " = " << Sohang[1] << " + " << Sohang[2] << " + " << Sohang[3] << " + " << Sohang[4] << endl;
break;
}
}
}
}
}
PhanTich2 << M << endl;
PhanTich2.close();
cout << " \n Hoan Tat \n";
system("pause");
}