End of Life Ruby 3.0 has reached end of life and gets no more fixes. Switch to Ruby 4.0 →
instance method
Prime#prime_division
prime_division(value, generator = Prime::Generator23.new)
lib/prime.rb
View on GitHub ↗
# File tmp/rubies/ruby-3.0.5/lib/prime.rb, line 303
def prime_division(value, generator = Prime::Generator23.new)
raise ZeroDivisionError if value == 0
if value < 0
value = -value
pv = [[-1, 1]]
else
pv = []
end
generator.each do |prime|
count = 0
while (value1, mod = value.divmod(prime)
mod) == 0
value = value1
count += 1
end
if count != 0
pv.push [prime, count]
end
break if value1 <= prime
end
if value > 1
pv.push [value, 1]
end
pv
end
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 ascending order. It must generate all prime numbers, but may also generate non-prime numbers, too.
Exceptions
ZeroDivisionError-
when
valueis zero.
Example
Example
Prime.prime_division(45) #=> [[3, 2], [5, 1]] 3**2 * 5 #=> 45