Sha256: 604b20265211bdbc8758eaa9d2b95f9bf94a801ee431c3319e0863901f3407f0

Contents?: true

Size: 660 Bytes

Versions: 4

Compression:

Stored size: 660 Bytes

Contents

class Integer
  def factorial
    return 1 if zero?
    (1..self).reduce(:*)
  end

  def factorial?
    divisors = self.divisors.sort
    divisors.each_with_index do |d, i|
      if divisors[i.succ] == d.succ
        return true if d.factorial == self
      else
        return d.factorial == self
      end
    end
  end

  def factorial_of?
    return false unless factorial?
    return 1 if self == 1
    pfacts = primaries
    divisors.sort.take_while.with_index{|d,i| d == i.succ}.reverse_each do |d|
      pfacts.all? do |b, e|
        (1..Math.log(d,b)).map{|k| Rational(d, b**k).floor}.reduce(:+) == e
      end and return d
    end
    nil
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
numb-0.186.0 lib/numb/factorial.rb
numb-0.185.0 lib/numb/factorial.rb
numb-0.184.0 lib/numb/factorial.rb
numb-0.181.0 lib/numb/factorial.rb