[Code review] Дано натуральное число n, можно его представить в виде суммы трех квадратов натуральных чисел - C#
Формулировка задачи:
Дано натуральное число n, можно его представить в виде суммы трех квадратов натуральных чисел. ЕСли можно,то указать тройку x^2+y^2+z^2=n. Проверьте программу, на правильность пожалуйста
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
int n, i, j, k, s;
Console.Write(" Введите число n = ");
n = Convert.ToInt32(Console.ReadLine());
for (i = 1; i <= n; i++)
{
for (j = 1; j <= n; j++)
{
for (k = 1; k <= n; k++)
{
s = i * i + j * j + k * k;
if (s == n)
{
Console.WriteLine(" Тройка чисел х^2 + y^2 + z^2 = n ");
Console.WriteLine(" x = " + i);
Console.WriteLine(" y = " + j);
Console.WriteLine(" z = " + k);
}
}
}
}
Console.ReadLine();
}
}
}Решение задачи: «[Code review] Дано натуральное число n, можно его представить в виде суммы трех квадратов натуральных чисел»
textual
Листинг программы
public class SoledData
{
public int x { get; set; }
public int y { get; set; }
public int z { get; set; }
}
internal class TripleNumber
{
private readonly int _sourceNumber;
public TripleNumber(int sourceNumber)
{
_sourceNumber = sourceNumber;
}
public SoledData GetNumbers()
{
var curr = (int) (Math.Sqrt(_sourceNumber));
return GetNumbers(curr);
}
private SoledData GetNumbers(int currentNumber)
{
if(currentNumber == 1)
throw new Exception();
var n_x = _sourceNumber - Math.Pow(currentNumber, 2);
var y =(int) Math.Round((Math.Sqrt(n_x)));
var n_z = n_x - (Math.Pow(y, 2));
var z = Math.Round(Math.Sqrt(n_z));
if ((int) (Math.Pow(currentNumber, 2) + Math.Pow(y, 2) + Math.Pow(z, 2)) == _sourceNumber && currentNumber > 0 && y > 0 && z > 0)
return new SoledData {x = (int)currentNumber, y = (int) y, z = (int) z};
return GetNumbers(currentNumber - 1);
}
}