Advertisement
Guest User

Comparison of Implementations of the Euclidean algorithm

a guest
Dec 3rd, 2012
342
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 4.30 KB | None | 0 0
  1. using System;
  2. using System.Numerics;
  3. using System.Diagnostics;
  4.  
  5. namespace GreatestCommonDivisorEuclid
  6. {
  7.     class GreatestCommonDivisorEuclid
  8.     {
  9.         static BigInteger GcdMine(BigInteger num1, BigInteger num2)
  10.         {
  11.             BigInteger temp;
  12.  
  13.             if (num1 > num2)
  14.             {
  15.                 while (num1 % num2 != 0)
  16.                 {
  17.                     temp = num2;
  18.                     num2 = num1 % num2;
  19.                     num1 = temp;
  20.                 }
  21.                 return num2;
  22.             }
  23.             else
  24.             {
  25.                 while (num2 % num1 != 0)
  26.                 {
  27.                     temp = num1;
  28.                     num1 = num2 % num1;
  29.                     num2 = temp;
  30.                 }
  31.                 return num1;
  32.             }
  33.         }
  34.  
  35.         static BigInteger GcdRecursion(BigInteger num1, BigInteger num2)
  36.         {
  37.             if (num2 == 0)
  38.             {
  39.                 return num1;
  40.             }
  41.             else
  42.             {
  43.                 return GcdRecursion(num2, num1 % num2);
  44.             }
  45.         }
  46.  
  47.         static BigInteger GcdIterativeDivision(BigInteger num1, BigInteger num2)
  48.         {
  49.             while (num1 != 0 && num2 != 0)
  50.             {
  51.                 if (num1 > num2)
  52.                 {
  53.                     num1 %= num2;
  54.                 }
  55.                 else
  56.                 {
  57.                     num2 %= num1;
  58.                 }
  59.             }
  60.  
  61.             if (num1 == 0)
  62.             {
  63.                 return num2;
  64.             }
  65.             else
  66.             {
  67.                 return num1;
  68.             }
  69.         }
  70.  
  71.         static BigInteger GcdIterativeSubtraction(BigInteger num1, BigInteger num2)
  72.         {
  73.             while (num1 != 0 && num2 != 0)
  74.             {
  75.                 if (num1 > num2)
  76.                     num1 -= num2;
  77.                 else
  78.                     num2 -= num1;
  79.             }
  80.  
  81.             if (num1 > num2)
  82.             {
  83.                 return num1;
  84.             }
  85.             else
  86.             {
  87.                 return num2;
  88.             }
  89.         }
  90.  
  91.         static void Main(string[] args)
  92.         {
  93.             //bool success;
  94.             //string toBeParsed;
  95.             BigInteger firstNumber = 14234298148921987940, secondNumber = 213484887418;
  96.             BigInteger gcd;
  97.  
  98.             //do
  99.             //{
  100.             //    Console.Clear();
  101.             //    Console.Write("Enter first number: ");
  102.             //    toBeParsed = Console.ReadLine();
  103.             //    success = BigInteger.TryParse(toBeParsed, out firstNumber);
  104.             //}
  105.             //while ((!success) || (firstNumber < 1));
  106.  
  107.             //do
  108.             //{
  109.             //    Console.Clear();
  110.             //    Console.WriteLine("Enter first number: {0}", firstNumber);
  111.             //    Console.Write("Enter second number: ");
  112.             //    toBeParsed = Console.ReadLine();
  113.             //    success = BigInteger.TryParse(toBeParsed, out secondNumber);
  114.             //}
  115.             //while ((!success) || (secondNumber < 1));
  116.  
  117.             Stopwatch timer = new Stopwatch();
  118.  
  119.             timer.Start();
  120.             gcd = GcdMine(firstNumber, secondNumber);
  121.             timer.Stop();
  122.             Console.WriteLine("GCD is {0}", gcd);
  123.             Console.WriteLine("Elapsed System Clock Ticks: " + timer.ElapsedTicks);
  124.  
  125.             timer.Reset();
  126.             timer.Start();
  127.             gcd = GcdRecursion(firstNumber, secondNumber);
  128.             timer.Stop();
  129.             Console.WriteLine("GCD (recursion algorithm) is {0}", gcd);
  130.             Console.WriteLine("Elapsed System Clock Ticks: " + timer.ElapsedTicks);
  131.  
  132.             timer.Reset();
  133.             timer.Start();
  134.             gcd = GcdIterativeDivision(firstNumber, secondNumber);
  135.             timer.Stop();
  136.             Console.WriteLine("GCD (iterative algorithm with division) is {0}", gcd);
  137.             Console.WriteLine("Elapsed System Clock Ticks: " + timer.ElapsedTicks);
  138.  
  139.             timer.Reset();
  140.             timer.Start();
  141.             gcd = GcdIterativeSubtraction(firstNumber, secondNumber);
  142.             timer.Stop();
  143.             Console.WriteLine("GCD (iterative algorithm with subtraction) is {0}", gcd);
  144.             Console.WriteLine("Elapsed System Clock Ticks: " + timer.ElapsedTicks);
  145.         }
  146.     }
  147. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement