Module: AlphaMath
- Defined in:
- lib/alpha_math.rb
Class Method Summary collapse
- .decomposition(number, factors = []) ⇒ Object
- .digital_root(number) ⇒ Object
- .divisors_of(number) ⇒ Object
- .magnitude(number) ⇒ Object
- .partitions(number) ⇒ Object
- .power_of_2?(number) ⇒ Boolean
- .prime?(number) ⇒ Boolean
- .primorial(number) ⇒ Object
- .trailing_zeros_of_factorial(number) ⇒ Object
Class Method Details
.decomposition(number, factors = []) ⇒ Object
5 6 7 8 9 10 11 12 13 14 15 |
# File 'lib/alpha_math.rb', line 5 def self.decomposition(number, factors = []) return factors if number == 1 (2..number).each do |divisor| divmod = number.divmod(divisor) quotient, rest = divmod.first, divmod.last if rest.zero? factors << divisor return decomposition(quotient, factors) end end end |
.digital_root(number) ⇒ Object
17 18 19 20 21 |
# File 'lib/alpha_math.rb', line 17 def self.digital_root(number) return 0 if number == 0 rest = number.divmod(9).last rest == 0 ? 9 : rest end |
.divisors_of(number) ⇒ Object
23 24 25 |
# File 'lib/alpha_math.rb', line 23 def self.divisors_of(number) (1..number / 2).select { |divisor| number.divmod(divisor).last.zero? } << number end |
.magnitude(number) ⇒ Object
27 28 29 30 31 32 |
# File 'lib/alpha_math.rb', line 27 def self.magnitude(number) return -Float::INFINITY if number == 0 decimal, power = ("%e" % number.abs).split('e') decimal, power = Float(decimal), Integer(power) decimal < 5 ? power : power + 1 end |
.partitions(number) ⇒ Object
65 66 67 |
# File 'lib/alpha_math.rb', line 65 def self.partitions(number) Partitions.new.enumerates(number) end |
.power_of_2?(number) ⇒ Boolean
34 35 36 |
# File 'lib/alpha_math.rb', line 34 def self.power_of_2?(number) number.to_s(2).count('1') == 1 end |
.prime?(number) ⇒ Boolean
38 39 40 41 42 43 |
# File 'lib/alpha_math.rb', line 38 def self.prime?(number) return false if number < 2 (2..Math.sqrt(number).to_i).each do |divisor| return false if number.divmod(divisor).last.zero? end end |
.primorial(number) ⇒ Object
45 46 47 48 49 50 51 52 53 54 |
# File 'lib/alpha_math.rb', line 45 def self.primorial(number) primes = [] (2...Float::INFINITY).each do |value| if primes.count < number primes << value if prime?(value) else return primes.inject(:*) end end end |
.trailing_zeros_of_factorial(number) ⇒ Object
56 57 58 59 60 61 62 63 |
# File 'lib/alpha_math.rb', line 56 def self.trailing_zeros_of_factorial(number) zeros, multiple = 0, 5 while (count = number / multiple) != 0 zeros += count multiple *= 5 end zeros end |