40 lines
1.5 KiB
C#
40 lines
1.5 KiB
C#
using System;
|
|
|
|
namespace RosettaCode.CSharp
|
|
{
|
|
class Program
|
|
{
|
|
static void Count_New_Triangle(ulong A, ulong B, ulong C, ulong Max_Perimeter, ref ulong Total_Cnt, ref ulong Primitive_Cnt)
|
|
{
|
|
ulong Perimeter = A + B + C;
|
|
|
|
if (Perimeter <= Max_Perimeter)
|
|
{
|
|
Primitive_Cnt = Primitive_Cnt + 1;
|
|
Total_Cnt = Total_Cnt + Max_Perimeter / Perimeter;
|
|
Count_New_Triangle(A + 2 * C - 2 * B, 2 * A + 2 * C - B, 2 * A + 3 * C - 2 * B, Max_Perimeter, ref Total_Cnt, ref Primitive_Cnt);
|
|
Count_New_Triangle(A + 2 * B + 2 * C, 2 * A + B + 2 * C, 2 * A + 2 * B + 3 * C, Max_Perimeter, ref Total_Cnt, ref Primitive_Cnt);
|
|
Count_New_Triangle(2 * B + 2 * C - A, B + 2 * C - 2 * A, 2 * B + 3 * C - 2 * A, Max_Perimeter, ref Total_Cnt, ref Primitive_Cnt);
|
|
}
|
|
}
|
|
|
|
static void Count_Pythagorean_Triples()
|
|
{
|
|
ulong T_Cnt, P_Cnt;
|
|
|
|
for (int I = 1; I <= 8; I++)
|
|
{
|
|
T_Cnt = 0;
|
|
P_Cnt = 0;
|
|
ulong ExponentNumberValue = (ulong)Math.Pow(10, I);
|
|
Count_New_Triangle(3, 4, 5, ExponentNumberValue, ref T_Cnt, ref P_Cnt);
|
|
Console.WriteLine("Perimeter up to 10E" + I + " : " + T_Cnt + " Triples, " + P_Cnt + " Primitives");
|
|
}
|
|
}
|
|
|
|
static void Main(string[] args)
|
|
{
|
|
Count_Pythagorean_Triples();
|
|
}
|
|
}
|
|
}
|