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

5.6 KiB

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

Description

Um número de Mersenne é um número na forma de 2 P -1.

Se P é primo, o número de Mersenne pode ser um primo de Mersenne

(se P não é primo, o número de Mersenne também não é primo).

Na busca por números primos de Mersenne, é vantajoso eliminar os expoentes encontrando um pequeno fator antes de iniciar um teste potencialmente longo, Lucas-Lehmer .

Existem algoritmos muito eficientes para determinar se um número divide 2 P -1 (ou equivalentemente, se 2 P mod (o número) = 1).

Algumas linguagens já possuem implementações embutidas desta operação expoente e mod (chamada modPow ou similar).

O seguinte é como implementar este modPow você mesmo:

Por exemplo, vamos calcular 2 23 mod 47.

Converta o expoente 23 para binário, você obtém 10111. Começando com square = 1, repetidamente, faça o quadrado.

Remova o bit de cima do expoente, e se for 1 multiplique o quadrado pela base da exponenciação (2), então calcule o módulo quadrado 47.

Use o resultado do módulo da última etapa como o valor inicial do quadrado na próxima etapa:

Remover Opcional

bit superior quadrado multiplicar por 2 mod 47

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

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

2 * 2 = 4 0 111 não 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

Desde 2 23 mod 47 = 1, 47 é um fator de 2 P -1.

(Para ver isso, subtraia 1 de ambos os lados: 2 23 -1 = 0 mod 47.)

Já que mostramos que 47 é um fator, 2 23 -1 não é primo.

Outras propriedades dos números de Mersenne nos permitem refinar ainda mais o processo.

Qualquer fator q de 2 P -1 deve ter a forma 2kP + 1, sendo k um inteiro positivo ou zero. Além disso, q deve ser 1 ou 7 mod 8.

Finalmente, qualquer fator potencial q deve ser primo .

Como em outros algoritmos de divisão de teste, o algoritmo para quando 2kP + 1> sqrt (N).

Esses testes de primalidade só funcionam em números de Mersenne onde P é primo. Por exemplo, M 4 = 15 não produz nenhum fator usando essas técnicas, mas os fatores em 3 e 5, nenhum dos quais se ajusta a 2kP + 1.

Tarefa:

Usando o método acima, encontre um fator de 2 929 -1 (também conhecido como M929)

Tarefas relacionadas: contar em fatores fatores primários de decomposição de um inteiro Cremer of Eratosthenes primality por trial trial factoring de um número Mersenne partition um inteiro X em N primes seqüência de primos por Trial Division Computers em 1948: 2¹²⁷-1

Instructions

Tests

tests:
  - text: <code>check_mersenne</code> é uma função.
    testString: 'assert(typeof check_mersenne === "function", "<code>check_mersenne</code> is a function.");'
  - text: <code>check_mersenne(3)</code> deve retornar uma string.
    testString: 'assert(typeof check_mersenne(3) == "string", "<code>check_mersenne(3)</code> should return a string.");'
  - text: <code>check_mersenne(3)</code> deve retornar &quot;M3 = 2 ^ 3-1 é 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> deve retornar &quot;M23 = 2 ^ 23-1 é composto com fator 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> deve retornar &quot;M929 = 2 ^ 929-1 é composto com fator 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