stdlib/prime/0/prime.rbs in rbs-2.0.0 vs stdlib/prime/0/prime.rbs in rbs-2.1.0
- old
+ new
@@ -1,5 +1,6 @@
+# <!-- rdoc-file=lib/prime.rb -->
# The set of all prime numbers.
#
# ## Example
#
# Prime.each(100) do |prime|
@@ -28,28 +29,31 @@
#
# `Prime`::`PseudoPrimeGenerator` is the base class for generators. There are
# few implementations of generator.
#
# `Prime`::`EratosthenesGenerator`
-# : Uses eratosthenes' sieve.
+# : Uses Eratosthenes' sieve.
# `Prime`::`TrialDivisionGenerator`
# : Uses the trial division method.
# `Prime`::`Generator23`
# : Generates all positive integers which are not divisible by either 2 or 3.
# This sequence is very bad as a pseudo-prime sequence. But this is faster
# and uses much less memory than the other generators. So, it is suitable
# for factorizing an integer which is not large but has many prime factors.
# e.g. for Prime#prime? .
#
-#
class Prime
include Singleton
include Enumerable[Integer]
extend Enumerable[Integer]
+ # <!--
+ # rdoc-file=lib/prime.rb
+ # - each(ubound = nil, generator = EratosthenesGenerator.new, &block)
+ # -->
# Iterates the given block over all prime numbers.
#
# ## Parameters
#
# `ubound`
@@ -73,117 +77,180 @@
# numbers p <= `ubound`.
#
def self?.each: (?Integer? ubound, ?PseudoPrimeGenerator generator) { (Integer) -> void } -> void
| (?Integer? ubound, ?PseudoPrimeGenerator generator) -> PseudoPrimeGenerator
+ # <!--
+ # rdoc-file=lib/prime.rb
+ # - int_from_prime_division(pd)
+ # -->
# Re-composes a prime factorization and returns the product.
#
+ # For the decomposition:
+ #
+ # [[p_1, e_1], [p_2, e_2], ..., [p_n, e_n]],
+ #
+ # it returns:
+ #
+ # p_1**e_1 * p_2**e_2 * ... * p_n**e_n.
+ #
# ## Parameters
# `pd`
- # : Array of pairs of integers. The each internal pair consists of a prime
- # number -- a prime factor -- and a natural number -- an exponent.
+ # : Array of pairs of integers. Each pair consists of a prime number -- a
+ # prime factor -- and a natural number -- its exponent (multiplicity).
#
#
# ## Example
- # For `[[p_1, e_1], [p_2, e_2], ...., [p_n, e_n]]`, it returns:
+ # Prime.int_from_prime_division([[3, 2], [5, 1]]) #=> 45
+ # 3**2 * 5 #=> 45
#
- # p_1**e_1 * p_2**e_2 * .... * p_n**e_n.
- #
- # Prime.int_from_prime_division([[2,2], [3,1]]) #=> 12
- #
def self?.int_from_prime_division: (Array[[ Integer, Integer ]]) -> Integer
- # Returns true if `value` is a prime number, else returns false.
+ # <!--
+ # rdoc-file=lib/prime.rb
+ # - prime?(value, generator = Prime::Generator23.new)
+ # -->
+ # Returns true if `value` is a prime number, else returns false. Integer#prime?
+ # is much more performant.
#
# ## Parameters
#
# `value`
# : an arbitrary integer to be checked.
# `generator`
# : optional. A pseudo-prime generator.
#
def self?.prime?: (Integer value, ?PseudoPrimeGenerator generator) -> bool
+ # <!--
+ # rdoc-file=lib/prime.rb
+ # - prime_division(value, generator = Prime::Generator23.new)
+ # -->
# Returns the factorization of `value`.
#
+ # For an arbitrary integer:
+ #
+ # p_1**e_1 * p_2**e_2 * ... * p_n**e_n,
+ #
+ # prime_division returns an array of pairs of integers:
+ #
+ # [[p_1, e_1], [p_2, e_2], ..., [p_n, e_n]].
+ #
+ # Each pair consists of a prime number -- a prime factor -- and a natural number
+ # -- its exponent (multiplicity).
+ #
# ## Parameters
# `value`
# : An arbitrary integer.
# `generator`
# : Optional. A pseudo-prime generator. `generator`.succ must return the next
- # pseudo-prime number in the ascending order. It must generate all prime
- # numbers, but may also generate non prime numbers too.
+ # pseudo-prime number in ascending order. It must generate all prime
+ # numbers, but may also generate non-prime numbers, too.
#
#
# ### Exceptions
# `ZeroDivisionError`
# : when `value` is zero.
#
#
# ## Example
- # For an arbitrary integer:
#
- # n = p_1**e_1 * p_2**e_2 * .... * p_n**e_n,
+ # Prime.prime_division(45) #=> [[3, 2], [5, 1]]
+ # 3**2 * 5 #=> 45
#
- # prime_division(n) returns:
- #
- # [[p_1, e_1], [p_2, e_2], ...., [p_n, e_n]].
- #
- # Prime.prime_division(12) #=> [[2,2], [3,1]]
- #
def self?.prime_division: (Integer, ?PseudoPrimeGenerator generator) -> Array[[ Integer, Integer ]]
# Returns the singleton instance.
#
def self.instance: () -> Prime
+ # <!-- rdoc-file=lib/prime.rb -->
# An abstract class for enumerating pseudo-prime numbers.
#
# Concrete subclasses should override succ, next, rewind.
#
class PseudoPrimeGenerator
+ # <!--
+ # rdoc-file=lib/prime.rb
+ # - new(ubound = nil)
+ # -->
+ #
def initialize: (?Integer?) -> void
include Enumerable[Integer]
- attr_accessor upper_bound (): Integer?
+ # <!--
+ # rdoc-file=lib/prime.rb
+ # - upper_bound()
+ # -->
+ # ----
+ # <!--
+ # rdoc-file=lib/prime.rb
+ # - upper_bound=(ubound)
+ # -->
+ #
+ attr_accessor upper_bound(): Integer?
+ # <!--
+ # rdoc-file=lib/prime.rb
+ # - each() { |prime| ... }
+ # -->
# Iterates the given block for each prime number.
#
def each: () { (Integer) -> void } -> void
+ # <!--
+ # rdoc-file=lib/prime.rb
+ # - next()
+ # -->
# alias of `succ`.
#
def next: () -> Integer
+ # <!--
+ # rdoc-file=lib/prime.rb
+ # - rewind()
+ # -->
# Rewinds the internal position for enumeration.
#
# See `Enumerator`#rewind.
#
def rewind: () -> void
+ # <!--
+ # rdoc-file=lib/prime.rb
+ # - size()
+ # -->
+ #
def size: () -> Float
+ # <!--
+ # rdoc-file=lib/prime.rb
+ # - succ()
+ # -->
# returns the next pseudo-prime number, and move the internal position forward.
#
# `PseudoPrimeGenerator`#succ raises `NotImplementedError`.
#
def succ: () -> Integer
end
+ # <!-- rdoc-file=lib/prime.rb -->
# An implementation of `PseudoPrimeGenerator`.
#
# Uses `EratosthenesSieve`.
#
class EratosthenesGenerator < PseudoPrimeGenerator
end
+ # <!-- rdoc-file=lib/prime.rb -->
# An implementation of `PseudoPrimeGenerator` which uses a prime table generated
# by trial division.
#
class TrialDivisionGenerator < PseudoPrimeGenerator
end
+ # <!-- rdoc-file=lib/prime.rb -->
# Generates all integers which are greater than 2 and are not divisible by
# either 2 or 3.
#
# This is a pseudo-prime generator, suitable on checking primality of an integer
# by brute force method.