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
- .power_of_2?(number) ⇒ Boolean
- .prime?(number) ⇒ Boolean
- .primorial(number) ⇒ Object
- .trailing_zeros_of_factorial(number) ⇒ Object
Class Method Details
.decomposition(number, factors = []) ⇒ Object
3 4 5 6 7 8 9 10 11 12 13 |
# File 'lib/alpha_math.rb', line 3 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
15 16 17 18 19 |
# File 'lib/alpha_math.rb', line 15 def self.digital_root(number) return 0 if number == 0 rest = number.divmod(9).last rest == 0 ? 9 : rest end |
.divisors_of(number) ⇒ Object
21 22 23 |
# File 'lib/alpha_math.rb', line 21 def self.divisors_of(number) (1..number / 2).select {|divisor| number.divmod(divisor).last.zero?} << number end |
.magnitude(number) ⇒ Object
25 26 27 28 29 30 |
# File 'lib/alpha_math.rb', line 25 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 |
.power_of_2?(number) ⇒ Boolean
32 33 34 |
# File 'lib/alpha_math.rb', line 32 def self.power_of_2?(number) number.to_s(2).count('1') == 1 end |
.prime?(number) ⇒ Boolean
36 37 38 39 40 41 |
# File 'lib/alpha_math.rb', line 36 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
43 44 45 46 47 48 49 50 51 52 |
# File 'lib/alpha_math.rb', line 43 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
54 55 56 57 58 59 60 61 |
# File 'lib/alpha_math.rb', line 54 def self.trailing_zeros_of_factorial(number) zeros, multiple = 0, 5 while (count = number / multiple) != 0 zeros += count multiple *= 5 end zeros end |