Ya no tienes que buscar más por todo internet ya que llegaste al sitio perfecto, tenemos la respuesta que buscas pero sin complicarte.
- Padre:
- Objeto
- Módulos incluidos:
- Enumerable, Singleton
El conjunto de todos los números primos.
Ejemplo
Prime.each(100)do|prime| p prime #=> 2, 3, 5, 7, 11, ...., 97end
Prime
es Enumerable:
Prime.first 5# => [2, 3, 5, 7, 11]
Recuperando la instancia
Por conveniencia, cada método de instancia de Prime
.instance se puede acceder como un método de clase de Prime
.
p.ej
Prime.instance.prime?(2)#=> truePrime.prime?(2)#=> true
Generadores
Un “generador” proporciona una implementación de enumeración de números pseudoprimos y recuerda la posición de la enumeración y el límite superior. Además, es un iterador externo de enumeración prima que es compatible con una Enumerator
.
Prime
::PseudoPrimeGenerator
es la clase base para generadores. Hay pocas implementaciones de generador.
Prime
::EratosthenesGenerator
-
Utiliza el tamiz de Eratóstenes.
Prime
::TrialDivisionGenerator
-
Utiliza el método de división de prueba.
Prime
::Generator23
-
Genera todos los enteros positivos que no son divisibles por 2 o 3. Esta secuencia es muy mala como secuencia pseudoprima. Pero esto es más rápido y usa mucha menos memoria que los otros generadores. Por lo tanto, es adecuado para factorizar un número entero que no es grande pero tiene muchos factores primos. p. ej. para
Prime#prime?
.
Constantes
- VERSIÓN
Métodos de instancia pública
cada(ubound = nil, generator = EratosthenesGenerator.new, & block)Mostrar fuente
# File lib/prime.rb, line 212defeach(ubound =nil, generator =EratosthenesGenerator.new,&block) generator.upper_bound = ubound generator.each(&block)end
Repite el bloque dado sobre todos los números primos.
Parámetros
ubound
-
Opcional. Un número positivo arbitrario. El límite superior de la enumeración. El método enumera los números primos infinitamente si
ubound
es nulo. generator
-
Opcional. Una implementación de pseudo-prime generator.
Valor devuelto
Un valor evaluado del bloque dado por última vez. O un enumerador que sea compatible con un Enumerator
si no se da ningún bloque.
Descripción
Llamadas block
una vez por cada número primo, pasando el primo como parámetro.
ubound
-
Límite superior de números primos. El iterador se detiene después de producir todos los números primos p <=
ubound
.
¿incluir?(obj)Mostrar fuente
# File lib/prime.rb, line 220definclude?(obj)case obj whenInteger prime?(obj)whenModuleModule.instance_method(:include?).bind(Prime).call(obj)elsefalseendend
Devoluciones true si obj
es un Integer
y es primo. También regresa true si obj
es un Module
que es un antepasado de Prime
. De lo contrario regresa false.
int_from_prime_division(pd)Mostrar fuente
# File lib/prime.rb, line 268defint_from_prime_division(pd) pd.inject(1)end
Re-compone una factorización prima y devuelve el producto.
Para la descomposición:
[[p_1, e_1], [p_2, e_2], ..., [p_n, e_n]],
vuelve:
p_1**e_1 * p_2**e_2 * ... * p_n**e_n.
Parámetros
pd
-
Array
de pares de enteros. Cada par consta de un número primo, un factor primo, y un número natural, su exponente (multiplicidad).
Ejemplo
Prime.int_from_prime_division([[3,2],[5,1]])#=> 453**2*5#=> 45
¿principal?(valor, generador = Prime :: Generator23.new)Mostrar fuente
# File lib/prime.rb, line 238defprime?(value, generator =Prime::Generator23.new)raiseArgumentError,"Expected a prime generator, got #generator"unless generator.respond_to?:eachraiseArgumentError,"Expected an integer, got #value"unless value.respond_to?(:integer?)&& value.integer?returnfalseif value <2 generator.eachdo|num| q,r = value.divmod num returntrueif q < num returnfalseif r ==0endend
Devoluciones true si value
es un número primo, de lo contrario devuelve false. Integer#prime?
es mucho más eficaz.
Parámetros
value
-
un entero arbitrario a comprobar.
generator
-
Opcional. Un generador pseudoprimo.
prime_division(valor, generador = Prime :: Generator23.new)Mostrar fuente
# File lib/prime.rb, line 303defprime_division(value, generator =Prime::Generator23.new)raiseZeroDivisionErrorif value ==0if value <0 value =-value pv =[[-1,1]]else pv =[]end generator.eachdo|prime| count =0while(value1, mod = value.divmod(prime) mod)==0 value = value1 count +=1endif count !=0 pv.push [prime, count]endbreakif value1 <= prime endif value >1 pv.push [value,1]end pv end
Devuelve la factorización de value
.
Para un entero arbitrario:
p_1**e_1 * p_2**e_2 * ... * p_n**e_n,
prime_division
devuelve un array de pares de enteros:
[[p_1, e_1], [p_2, e_2], ..., [p_n, e_n]].
Cada par consta de un número primo, un factor primo, y un número natural, su exponente (multiplicidad).
Parámetros
value
-
Un entero arbitrario.
generator
-
Opcional. Un generador pseudoprimo.
generator
.succ debe devolver el siguiente número pseudoprimo en orden ascendente. Debe generar todos los números primos, pero también puede generar números no primos.
Excepciones
ZeroDivisionError
-
cuando
value
es cero.
Ejemplo
Prime.prime_division(45)#=> [[3, 2], [5, 1]]3**2*5#=> 45
Nos encantaría que puedieras comunicar este artículo si te fue de ayuda.