class Integer

Public Class Methods

each_prime(ubound) { |prime| ... } click to toggle source

Iterates the given block over all prime numbers.

See Prime#each for more details.

# File lib/backports/1.9.1/stdlib/prime.rb, line 48
def Integer.each_prime(ubound, &block) # :yields: prime
  Prime.each(ubound, &block)
end
from_prime_division(pd) click to toggle source

Re-composes a prime factorization and returns the product.

See Prime#int_from_prime_division for more details.

# File lib/backports/1.9.1/stdlib/prime.rb, line 22
def Integer.from_prime_division(pd)
  Prime.int_from_prime_division(pd)
end
sqrt(n) click to toggle source
# File lib/backports/2.5.0/integer/sqrt.rb, line 6
def self.sqrt(n)
  n = Backports.coerce_to_int(n)
  return Math.sqrt(n).to_i if n <= 9_999_899_999_899_999_322_536_673_279
  bits_shift = n.bit_length/2 + 1
  bitn_mask = root = 1 << bits_shift
  while true
    root ^= bitn_mask if (root * root) > n
    bitn_mask >>= 1
    return root if bitn_mask == 0
    root |= bitn_mask
  end
end

Public Instance Methods

allbits?(n) click to toggle source
# File lib/backports/2.5.0/integer/allbits.rb, line 4
def allbits?(n)
  n = Backports.coerce_to_int(n)
  n & self == n
end
anybits?(n) click to toggle source
# File lib/backports/2.5.0/integer/anybits.rb, line 4
def anybits?(n)
  n = Backports.coerce_to_int(n)
  n & self != 0
end
even?() click to toggle source
# File lib/backports/1.8.7/integer/even.rb, line 3
def even?
  self[0].zero?
end
nobits?(n) click to toggle source
# File lib/backports/2.5.0/integer/nobits.rb, line 4
def nobits?(n)
  n = Backports.coerce_to_int(n)
  n & self == 0
end
odd?() click to toggle source
# File lib/backports/1.8.7/integer/odd.rb, line 3
def odd?
  !self[0].zero?
end
ord() click to toggle source
# File lib/backports/1.8.7/integer/ord.rb, line 3
def ord
  self
end
pred() click to toggle source
# File lib/backports/1.8.7/integer/pred.rb, line 3
def pred
  self - 1
end
prime?() click to toggle source

Returns true if self is a prime number, else returns false.

# File lib/backports/1.9.1/stdlib/prime.rb, line 34
def prime?
  return self >= 2 if self <= 3
  return false if self % 2 == 0 or self % 3 == 0
  (5..(self**0.5).floor).step(6).each do |i|
    if self % i == 0 || self % (i + 2) == 0
      return false
    end
  end
  true
end
prime_division(generator = Prime::Generator23.new) click to toggle source

Returns the factorization of self.

See Prime#prime_division for more details.

# File lib/backports/1.9.1/stdlib/prime.rb, line 29
def prime_division(generator = Prime::Generator23.new)
  Prime.prime_division(self, generator)
end
round_with_digits(ndigits=0) click to toggle source
# File lib/backports/1.9.1/integer/round.rb, line 6
def round_with_digits(ndigits=0)
  ndigits = Backports::coerce_to_int(ndigits)
  case
  when ndigits.zero?
    self
  when ndigits > 0
    raise RangeError if ndigits >= 1<<31
    Float(self)
  else
    pow = 10 ** (-ndigits)
    return 0 if pow.is_a?(Float) # when ndigits hugely negative
    remain = self % pow
    comp = self < 0 ? :<= : :<
    remain -= pow unless remain.send(comp, pow / 2)
    self - remain
  end
end