Sha256: e7af46d0d01e87b365ac6a346b33486ec1ecdb3c629083ab238177d482f906c0
Contents?: true
Size: 1.53 KB
Versions: 4
Compression:
Stored size: 1.53 KB
Contents
# coding: utf-8 class Integer def k_perfect?(k) σ == k * self end alias :multiply_perfect? :k_perfect? def perfect? return false if self < 6 or self.odd? or self.to_s !~ /(6|8)$/ return false if self != 6 and digital_root != 1 k_perfect?(2) end def semiperfect? return false if deficient? return true if perfect? possibles = { 0 => true} proper_sod = (sod = σ || 0) - self proper_divisors.reverse.each do |divisor| possibles.keys.each do |possible| possibles.delete(possible) if possible + sod < self x = possible + divisor return true if x == self or x == proper_sod possibles[x] = true if x < self end sod -= divisor end false end alias :pseudoperfect? :semiperfect? def almost_perfect? return true if self == 1 proper_divisors.reduce(:+) == self - 1 end alias :least_deficient? :almost_perfect? alias :slightly_defective? :almost_perfect? def e_perfect? return false if odd? σe == 2 * self end def unitary_perfect? proper_divisors.select do |divisor| unitary_divisor?(divisor) end.reduce(:+) == self end def hyperperfect?(k=1) raise ArgumentError unless k >= 1 (1 + (k * (σ - self - 1))) == self end def superperfect? σ.σ == 2 * self end def sublime? number_of_divisors.perfect? and σ.perfect? end def primitive_pseudoperfect? pseudoperfect? and proper_divisors.sort.none?(&:pseudoperfect?) end def infinitary_perfect? σ∞ == 2*self end end
Version data entries
4 entries across 4 versions & 1 rubygems
Version | Path |
---|---|
numb-0.185.0 | lib/numb/divisors/perfect.rb |
numb-0.184.0 | lib/numb/divisors/perfect.rb |
numb-0.181.0 | lib/numb/divisors/perfect.rb |
numb-0.170.0 | lib/numb/divisors/perfect.rb |