Нужно составить программу раскладывающую число на 3 квадрата
Программа в принципе игнорирует любой код, а не только If, если оказывается что число раскладывается по 3 квадратам. с нераскладывающимися числами проблем нет
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
setlocale(LC_ALL, "Rus"
int a = 0, q = 0, s = 0, y = 0, z = 0, w = 0;
cout << "Введите число: ";
cin >> a;
for (int i = a; (4 * i) % 4 == 0; i /= 4) //Теорема Лежандра о трёх квадратах
{
if ((i - 7) % 8 == 0)
{
q++;
break;
}
}
if (q == 1) //Не раскладывается на три квадрата
{
cout << "No solution." << endl;
}
if (q == 0) //Раскладывается на три квадрата
{
for (int j = 0; j < sqrt(a); j++)
{
for (int k = j; k < sqrt(a); k++)
{
for (int m = k; m < sqrt(a) + 1; m++)
{
if (j * j + k * k + m * m == a)
{
y = j;
z = k;
w = m;
s++;
goto link;
}
}
}
}
}
link:
if (s == 1)
{
cout << a << " = " << y << "^2 + " << z << "^2 + " << w << "^2" << endl;
}
return 0;
}
Программа в принципе игнорирует любой код, а не только If, если оказывается что число раскладывается по 3 квадратам. с нераскладывающимися числами проблем нет
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
setlocale(LC_ALL, "Rus"
int a = 0, q = 0, s = 0, y = 0, z = 0, w = 0;
cout << "Введите число: ";
cin >> a;
for (int i = a; (4 * i) % 4 == 0; i /= 4) //Теорема Лежандра о трёх квадратах
{
if ((i - 7) % 8 == 0)
{
q++;
break;
}
}
if (q == 1) //Не раскладывается на три квадрата
{
cout << "No solution." << endl;
}
if (q == 0) //Раскладывается на три квадрата
{
for (int j = 0; j < sqrt(a); j++)
{
for (int k = j; k < sqrt(a); k++)
{
for (int m = k; m < sqrt(a) + 1; m++)
{
if (j * j + k * k + m * m == a)
{
y = j;
z = k;
w = m;
s++;
goto link;
}
}
}
}
}
link:
if (s == 1)
{
cout << a << " = " << y << "^2 + " << z << "^2 + " << w << "^2" << endl;
}
return 0;
}