Jak poprawnie zapisać algorytm Euklidesa na dwa sposoby?

0

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();
        }
    }
}
2

Przecież w tym drugim kodzie w ogóle nie wywołałeś tej funkcji tylko wypisujesz sobie pierwszą wczytaną liczbę. o_O

1 użytkowników online, w tym zalogowanych: 0, gości: 1