private static T GreatestCommonDivisor <T>(T one, T two, IArithmetic <T> arithmetic) { T big = arithmetic.Max(arithmetic.Abs(one), arithmetic.Abs(two)); T small = arithmetic.Min(arithmetic.Abs(one), arithmetic.Abs(two)); T remainder = arithmetic.Modulo(big, small); return(arithmetic.Equals(remainder, arithmetic.Zero) ? small : AdvancedMath.GreatestCommonDivisor(small, remainder, arithmetic)); }
/// <summary> /// Finds the greatest common divisor of two numbers. /// The greatest common divisor is the largest positive integer that divides the numbers without a remainder. /// </summary> /// <param name="one">The one.</param> /// <param name="two">The two.</param> /// <returns>The greatest common divisor of the two numbers.</returns> public static sbyte GreatestCommonDivisor(sbyte one, sbyte two) { return(AdvancedMath.GreatestCommonDivisor(one, two, Arithmetics.SByte)); }
/// <summary> /// Finds the greatest common divisor of two numbers. /// The greatest common divisor is the largest positive integer that divides the numbers without a remainder. /// </summary> /// <param name="one">The one.</param> /// <param name="two">The two.</param> /// <returns>The greatest common divisor of the two numbers.</returns> public static long GreatestCommonDivisor(long one, long two) { return(AdvancedMath.GreatestCommonDivisor(one, two, Arithmetics.Int64)); }
/// <summary> /// Finds the greatest common divisor of two numbers. /// The greatest common divisor is the largest positive integer that divides the numbers without a remainder. /// </summary> /// <param name="one">The one.</param> /// <param name="two">The two.</param> /// <returns>The greatest common divisor of the two numbers.</returns> public static int GreatestCommonDivisor(int one, int two) { return(AdvancedMath.GreatestCommonDivisor(one, two, Arithmetics.Int32)); }
/// <summary> /// Finds the greatest common divisor of two numbers. /// The greatest common divisor is the largest positive integer that divides the numbers without a remainder. /// </summary> /// <param name="one">The one.</param> /// <param name="two">The two.</param> /// <returns>The greatest common divisor of the two numbers.</returns> public static short GreatestCommonDivisor(short one, short two) { return(AdvancedMath.GreatestCommonDivisor(one, two, Arithmetics.Int16)); }
/// <summary> /// Finds the greatest common divisor of two numbers. /// The greatest common divisor is the largest positive integer that divides the numbers without a remainder. /// </summary> /// <param name="one">The one.</param> /// <param name="two">The two.</param> /// <returns>The greatest common divisor of the two numbers.</returns> public static double GreatestCommonDivisor(double one, double two) { return(AdvancedMath.GreatestCommonDivisor(one, two, Arithmetics.Double)); }
/// <summary> /// Finds the greatest common divisor of two numbers. /// The greatest common divisor is the largest positive integer that divides the numbers without a remainder. /// </summary> /// <param name="one">The one.</param> /// <param name="two">The two.</param> /// <returns>The greatest common divisor of the two numbers.</returns> public static decimal GreatestCommonDivisor(decimal one, decimal two) { return(AdvancedMath.GreatestCommonDivisor(one, two, Arithmetics.Decimal)); }
private static T LeastCommonMultiple <T>(T one, T two, IArithmetic <T> arithmetic) { return(arithmetic.Divide(arithmetic.Abs(arithmetic.Multiply(one, two)), AdvancedMath.GreatestCommonDivisor(one, two, arithmetic))); }
/// <summary> /// Finds the greatest common divisor of two numbers. /// The greatest common divisor is the largest positive integer that divides the numbers without a remainder. /// </summary> /// <param name="one">The one.</param> /// <param name="two">The two.</param> /// <returns>The greatest common divisor of the two numbers.</returns> public static float GreatestCommonDivisor(float one, float two) { return(AdvancedMath.GreatestCommonDivisor(one, two, Arithmetics.Single)); }