Cześć, chcę zapisać algorytm euklidesa (z NWD) na dwa sposoby, pierwszy który tutaj zaprezentuje jest za pomocą do...while (który działa):
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace pętle
{
class Program
{
static void Main(string[] args)
{
ulong n, m, roznica;
Console.Write("Podaj wartość m: ");
n = Convert.ToUInt64(Console.ReadLine());
Console.Write("Podaj wartość n: ");
m = Convert.ToUInt64(Console.ReadLine());
do
{
roznica = m > n ? m - n : n - m;
if (n > m)
n = roznica;
else
m = roznica;
}
while (roznica != 0);
Console.WriteLine("Największy wspólny dzielnik podanych liczb to " + "{0}.", n);
Console.ReadLine();
}
}
}
A ten za pomoca while i funkcji jednak nie działa, dla 36 i 6 największy wspólny dzielnik pokazuje 36, gdzie zrobiłem błąd?
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace pętle
{
class Program
{
static ulong roznica(ulong a, ulong b)
{
while (a != b)
{
if (a > b)
a = a - b;
else
b = b - a;
}
return a;
}
static void Main(string[] args)
{
ulong a, b;
Console.Write("Podaj wartość m: ");
a = Convert.ToUInt64(Console.ReadLine());
Console.Write("Podaj wartość n: ");
b = Convert.ToUInt64(Console.ReadLine());
Console.WriteLine("Największy wspólny dzielnik podanych liczb to " + "{0}.", a);
Console.ReadLine();
}
}
}