Gostaríamos de fatorar um semiprime . O objetivo deste desafio é encontrar dois pequenos números inteiros e tais que pode ser trivialmente fatorado com o método de Fermat, permitindo assim a deduzir facilmente os fatores de .u vN
A tarefa
Dado um semiprime e um número inteiro positivo , definimos e como:k x y
y=x2-kN
Etapa # 1 - Encontre
Primeiro, você precisa encontrar o menor valor possível de , para que seja um número quadrado ( também conhecido como quadrado perfeito).y
Isso permite fatorar com uma única iteração do método de fatoração de Fermat . Mais concretamente, isso imediatamente leva a:
(Atualização: esta sequência agora é publicada como A316780 )
Etapa 2 - Fatorar
Você precisa encontrar os dois números inteiros positivos e modo que:
c u = x + √
em que e são os factores primários de .
Sumário
Sua tarefa é escrever um programa ou função que aceite como entrada e imprima ou produz e em qualquer ordem e formato razoável.u v
Exemplo
Vamos considerar
Passo 1
O menor valor possível de é , o que fornece:40
y=28232-40×199163=7969329-7966520=2809=532kN=(2823+53)×(2823-53)kN=2876×2770
Passo 2
A fatoração correta de é , porque:k = 4 × 10
k N = ( 719 × 4 ) × ( 277 × 10 ) N = 719 × 277
Portanto, a resposta correta seria ou .[ 10 , 4 ]
Regras
- Não é necessário aplicar estritamente as duas etapas descritas acima. Você é livre para usar qualquer outro método, desde que encontre os valores corretos de e .v
- Você deve suportar todos os valores de até o tamanho máximo nativo de um número inteiro não assinado em seu idioma.
- A entrada é garantida como semiprime.
- Isso é código-golfe, então a resposta mais curta em bytes vence.
- As brechas padrão são proibidas.
Casos de teste
N | k | Output
-----------+------+------------
143 | 1 | [ 1, 1 ]
2519 | 19 | [ 1, 19 ]
199163 | 40 | [ 4, 10 ]
660713 | 1 | [ 1, 1 ]
4690243 | 45 | [ 9, 5 ]
11755703 | 80 | [ 40, 2 ]
35021027 | 287 | [ 7, 41 ]
75450611 | 429 | [ 143, 3 ]
806373439 | 176 | [ 8, 22 ]
1355814601 | 561 | [ 17, 33 ]
3626291857 | 77 | [ 7, 11 ]
6149223463 | 255 | [ 17, 15 ]
6330897721 | 3256 | [ 74, 44 ]
Implementação de exemplo
No trecho de código abaixo, a função é uma implementação não-bloqueada que recebe como entrada e retorna e .N u v
Apenas para fins ilustrativos, o trecho de código também inclui a função que recebe , e como entrada e calcula os fatores de em .N u v N O ( 1 )
N
será de fato um semiprime?