Il compito è trovare un fattore non banale di un numero composto.
Scrivi il codice che trova il fattore non banale di un numero composto il più rapidamente possibile, a condizione che il tuo codice non sia lungo più di 140 byte. L'output dovrebbe essere solo il fattore che hai trovato.
Il codice può prendere input e fornire output in qualsiasi modo sia conveniente, incluso ad esempio come argomenti di una funzione.
Casi di prova che elencano tutti i fattori (è necessario solo emetterne uno)
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
Non segnerò la tua risposta sul seguente caso di test difficile che potrebbe essere di interesse per il test:
513231721363284898797712130584280850383: 40206835204840513073 12764787846358441471
Punto
Il tuo punteggio è il tempo combinato per fattorizzare tutti i casi di test sopra con una penalità di 10 minuti per ogni fattorizzazione fallita (tutto arrotondato al secondo più vicino). Il tuo codice dovrebbe funzionare anche per altri numeri interi, cioè non dovrebbe solo codificare queste risposte.
Smetterò il tuo codice dopo 10 minuti.
Se due persone ottengono lo stesso punteggio, vince la prima risposta.
restrizioni
Il codice non può utilizzare alcuna funzione incorporata o libreria che esegue la fattorizzazione a numeri interi. Si può presumere che l'input impieghi meno di 256 bit. Tutti i numeri di input saranno composti.
Come farò?
Eseguirò letteralmente time ./myprog
sul mio sistema Ubuntu per fare i tempi, quindi per favore forniscimi anche un programma completo che includa qualsiasi funzione che hai definito.
Una nota per le lingue compilate
Il tempo di compilazione non deve richiedere più di 1 minuto sulla mia macchina.
È davvero possibile?
Se ignori i vincoli di spazio, ognuno può essere preso in considerazione in meno di 2 secondi sul mio computer usando puro codice Python + pypy.
Quindi cos'è un algoritmo di factoring non banale?
L'algoritmo rho di Pollard è veloce e adatto per il golf. Ovviamente ci sono molti altri modi per fattorizzare anche un numero intero .
Ancora più veloce è il setaccio quadratico . Sembra una seria sfida comprimerlo in 140 byte.
Punteggi principali
- SEJPM , penalità di 10 minuti per l'ultimo caso di prova + 16 secondi in Haskell
2
o 2, 2
?
2 ** 1024
?