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