Пример #1
0
        /// <summary>
        /// Calculates GCD for two or more integer numbers. Out parameter returns method execution time
        /// </summary>
        /// <param name="method">delegate with target method</param>
        /// <param name="numberArray">input array</param>
        /// <returns>great common divisor</returns>
        private static int CheckConditionsAndFindGCDForTWoNumbers(GCDGetting method, params int[] numberArray)
        {
            if (numberArray == null)
            {
                throw new ArgumentNullException();
            }

            if (numberArray.Length < 2)
            {
                throw new ArgumentException();
            }

            List <int> numbers = new List <int>();

            for (int i = 0; i < numberArray.Length; i++)
            {
                if (numberArray[i] == 1)
                {
                    return(1);
                }

                if (numberArray[i] != 0)
                {
                    numbers.Add(numberArray[i]);
                }
            }

            if (numbers.Count == 0)
            {
                throw new ArgumentException();
            }

            if (numbers.Count == 1)
            {
                return(Math.Abs(numbers[0]));
            }

            int gdc = method.Invoke(numbers[0], numbers[1]);

            for (int i = 2; i < numbers.Count; i++)
            {
                if (numbers[i] == 0)
                {
                    continue;
                }

                if (gdc != 1)
                {
                    gdc = method.Invoke(gdc, numbers[i]);
                }
                else
                {
                    break;
                }
            }

            return(gdc);
        }
Пример #2
0
        /// <summary>
        /// Returns GCD for two or more integer numbers
        /// </summary>
        /// <param name="numberArray">input array of integer numbers</param>
        /// <returns>great common divisor</returns>
        /// <exception cref="ArgumentException"> if both parameters are zero </exception>
        public static int GetSteinGCD(params int[] numberArray)
        {
            GCDGetting method = GetSteinGCDForTwoNumbers;

            return(CheckConditionsAndFindGCDForTWoNumbers(method, numberArray));
        }