freeCodeCamp/curriculum/challenges/spanish/08-coding-interview-prep/rosetta-code/factors-of-a-mersenne-numbe...

5.9 KiB

title id challengeType videoUrl localeTitle
Factors of a Mersenne number 598eea87e5cf4b116c3ff81a 5 Factores de un número de Mersenne

Description

Un número de Mersenne es un número en forma de 2 P -1.

Si P es primo, el número de Mersenne puede ser un primo de Mersenne

(Si P no es primo, el número de Mersenne tampoco es primo).

En la búsqueda de números primos de Mersenne es ventajoso eliminar los exponentes al encontrar un factor pequeño antes de comenzar una prueba de Lucas-Lehmer potencialmente larga.

Hay algoritmos muy eficientes para determinar si un número divide 2 P -1 (o equivalentemente, si 2 P mod (el número) = 1).

Algunos idiomas ya tienen implementaciones integradas de esta operación de exponente y mod (llamada modPow o similar).

Lo siguiente es cómo implementar este modPow usted mismo:

Por ejemplo, vamos a calcular 2 23 mod 47.

Convierte el exponente 23 a binario, obtienes 10111. Comenzando con square = 1, cuadrándolo repetidamente.

Elimine el bit superior del exponente y, si es 1, multiplique el cuadrado por la base de la exponenciación (2), luego calcule el módulo cuadrado 47.

Utilice el resultado del módulo del último paso como el valor inicial del cuadrado en el siguiente paso:

Eliminar opcional

bit cuadrado superior multiplicar por 2 mod 47

------------ ------- ------------- ------

1 * 1 = 1 1 0111 1 * 2 = 2 2

2 * 2 = 4 0 111 no 4

4 * 4 = 16 1 11 16 * 2 = 32 32

32 * 32 = 1024 1 1 1024 * 2 = 2048 27

27 * 27 = 729 1 729 * 2 = 1458 1

Dado que 2 23 mod 47 = 1, 47 es un factor de 2 P -1.

(Para ver esto, reste 1 de ambos lados: 2 23 -1 = 0 mod 47.)

Como hemos demostrado que 47 es un factor, 2 23 -1 no es primo.

Otras propiedades de los números de Mersenne nos permiten refinar el proceso aún más.

Cualquier factor q de 2 P -1 debe tener la forma 2kP + 1, siendo k un entero positivo o cero. Además, q debe ser 1 o 7 mod 8.

Finalmente cualquier factor potencial q debe ser primo .

Como en otros algoritmos de división de prueba, el algoritmo se detiene cuando 2kP + 1> sqrt (N).

Estas pruebas de primalidad solo funcionan en los números de Mersenne donde P es primo. Por ejemplo, M 4 = 15 no produce factores utilizando estas técnicas, sino factores en 3 y 5, ninguno de los cuales se ajusta a 2kP + 1.

Tarea:

Usando el método anterior, encuentre un factor de 2 929 -1 (también conocido como M929)

Tareas relacionadas: contar en factores primos factores de descomposición de un entero Tamiz de primatía de Eratóstenes por división de prueba factorización de prueba de un número de Mersenne partición de un entero X en N primos secuencia de números primos por parte de Trial Division Computers en 1948: 2¹²⁷-1

Instructions

Tests

tests:
  - text: <code>check_mersenne</code> es una función.
    testString: 'assert(typeof check_mersenne === "function", "<code>check_mersenne</code> is a function.");'
  - text: <code>check_mersenne(3)</code> debería devolver una cadena.
    testString: 'assert(typeof check_mersenne(3) == "string", "<code>check_mersenne(3)</code> should return a string.");'
  - text: <code>check_mersenne(3)</code> debe devolver &quot;M3 = 2 ^ 3-1 es primo&quot;.
    testString: 'assert.equal(check_mersenne(3),"M3 = 2^3-1 is prime","<code>check_mersenne(3)</code> should return "M3 = 2^3-1 is prime".");'
  - text: <code>check_mersenne(23)</code> debe devolver &quot;M23 = 2 ^ 23-1 es compuesto con factor 47&quot;.
    testString: 'assert.equal(check_mersenne(23),"M23 = 2^23-1 is composite with factor 47","<code>check_mersenne(23)</code> should return "M23 = 2^23-1 is composite with factor 47".");'
  - text: <code>check_mersenne(929)</code> debe devolver &quot;M929 = 2 ^ 929-1 es compuesto con factor 13007
    testString: 'assert.equal(check_mersenne(929),"M929 = 2^929-1 is composite with factor 13007","<code>check_mersenne(929)</code> should return "M929 = 2^929-1 is composite with factor 13007");'

Challenge Seed

function check_mersenne (p) {
  // Good luck!
}

Solution

// solution required