A tarefa é encontrar um fator não trivial de um número composto.
Escreva um código que encontre um fator não trivial de um número composto o mais rápido possível, sujeito a que seu código não tenha mais que 140 bytes. A saída deve ser apenas o fator que você encontrou.
Seu código pode receber e fornecer resultados de qualquer maneira que seja conveniente, incluindo, por exemplo, como argumentos para uma função.
Casos de teste que listam todos os fatores (você só precisa gerar um)
187: 11 17
1679: 23 73
14369648346682547857: 1500450271 9576890767
34747575467581863011: 3628273133 9576890767
52634041113150420921061348357: 2860486313 5463458053 3367900313
82312263010898855308580978867: 264575131106459 311111111111113
205255454905325730631914319249: 2860486313 71755440315342536873
1233457775854251160763811229216063007: 1110111110111 1000000000063 1111111999999
1751952685614616185916001760791655006749: 36413321723440003717 48112959837082048697
Não pontuarei sua resposta no seguinte caso de teste difícil, que pode ser de interesse para o teste:
513231721363284898797712130584280850383: 40206835204840513073 12764787846358441471
Ponto
Sua pontuação é o tempo combinado para fatorar todos os casos de teste acima com uma penalidade de 10 minutos para cada fatoração com falha (todos arredondados para o segundo mais próximo). Seu código também deve funcionar para outros números inteiros, ou seja, não deve apenas codificar essas respostas.
Vou parar o seu código após 10 minutos.
Se duas pessoas obtiverem a mesma pontuação, a primeira resposta vence.
Restrições
Seu código não pode usar nenhuma função interna ou de biblioteca que execute a fatoração de número inteiro. Você pode assumir que a entrada leva menos de 256 bits. Todos os números de entrada serão compostos.
Como vou cronometrar?
Vou literalmente rodar time ./myprog
no meu sistema Ubuntu para fazer o tempo; por isso, forneça também um programa completo para rodar que inclua qualquer função que você definiu.
Uma observação para idiomas compilados
O tempo de compilação não deve demorar mais de 1 minuto na minha máquina.
Isso é realmente possível?
Se você ignorar as restrições de espaço, cada uma poderá ser fatorada em menos de 2 segundos no meu computador usando código Python puro + pypy.
Então, o que é um algoritmo de fatoração não trivial?
O algoritmo rho de Pollard é rápido e adequado para jogar golfe. É claro que existem muitas outras maneiras de fatorar um número inteiro também.
Ainda mais rápido é a peneira quadrática . Parece um sério desafio espremer isso em 140 bytes.
Pontuações principais
- SEJPM , 10 minutos de penalidade no último caso de teste + 16 segundos em Haskell
2
ou 2, 2
?
2 ** 1024
?