Module: AlphaMath

Defined in:
lib/alpha_math.rb

Class Method Summary collapse

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

Returns:

  • (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

Returns:

  • (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