private static Factorization PrimeFactors(long number) { var factors = new Factorization(); long num = number; foreach (var prime in s_primes) { if (num % prime != 0) { continue; } int ex = 0; while (num % prime == 0) { num /= prime; ex++; } factors.Add(prime, ex); if (num == 1) { return(factors); } } factors.Add(num, 1); return(factors); }
public Factorization MultiplyBy(Factorization by) { foreach (var(prime, exp) in by) { if (!this.ContainsKey(prime)) { this.Add(prime, 0); } this[prime] += exp; } return(this); }
public Factorization DivideBy(Factorization by) { foreach (var(prime, exp) in by) { if (!this.ContainsKey(prime) || this[prime] < exp) { throw new InvalidOperationException($"{this.Value()} is not divisible by {prime}"); } } foreach (var(prime, exp) in by) { this[prime] -= exp; if (this[prime] == 0) { this.Remove(prime); } } return(this); }
public Factorization DivideBy(long by) { return(DivideBy(Factorization.Of(by))); }
public Factorization MultiplyBy(long by) { return(MultiplyBy(Factorization.Of(by))); }
public Factorization(Factorization other) : base(other) { }