public static IEnumerable <int> GetProperDivisors(this int n) { FactorizedNumber factorized = n.Factorize(); var results = new List <int>(); void Loop(FactorizedNumber number, int factorIndex, int currentResult) { int prime = number[factorIndex].Prime; for (int e = 0; e <= number[factorIndex].Exponent; e++) { if (e > 0) { currentResult *= prime; } if (factorIndex == number.Count - 1) { results.Add(currentResult); } else { Loop(number, factorIndex + 1, currentResult); } } } Loop(factorized, 0, 1); return(results.Where(x => x != n)); }
public static int GetEulersTotient(this int n) { FactorizedNumber factorizedNumber = n.Factorize(); BigInteger result = 1; foreach (PrimeFactor primeFactor in factorizedNumber) { BigInteger p2 = BigInteger.Pow(primeFactor.Prime, primeFactor.Exponent - 1); BigInteger p1 = p2 * primeFactor.Prime; result *= p1 - p2; } return((int)result); }