La tâche consiste à trouver un facteur non trivial d'un nombre composite.
Écrivez le code qui trouve le plus rapidement possible un facteur non trivial d'un nombre composite, sous réserve que votre code ne dépasse pas 140 octets. La sortie doit simplement être le facteur que vous avez trouvé.
Votre code peut prendre des entrées et donner des sorties de n'importe quelle manière, y compris par exemple en tant qu'arguments à une fonction.
Cas de test qui répertorient tous les facteurs (il vous suffit d'en générer un)
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
Je ne marquerai pas votre réponse sur le cas de test difficile suivant qui peut être intéressant pour le test:
513231721363284898797712130584280850383: 40206835204840513073 12764787846358441471
But
Votre score est le temps combiné pour factoriser tous les cas de test ci-dessus avec une pénalité de 10 minutes pour chaque factorisation échouée (tous arrondis à la seconde la plus proche). Votre code devrait également fonctionner pour d'autres entiers, c'est-à-dire ne devrait pas simplement coder en dur ces réponses.
Je vais arrêter votre code après 10 minutes.
Si deux personnes obtiennent le même score, la première réponse l'emporte.
Restrictions
Votre code ne peut pas utiliser de fonction intégrée ou de bibliothèque qui effectue une factorisation entière. Vous pouvez supposer que l'entrée prend moins de 256 bits. Tous les numéros d'entrée seront composites.
Comment vais-je chronométrer?
Je vais littéralement fonctionner time ./myprog
sur mon système Ubuntu pour faire le chronométrage, veuillez donc également fournir un programme complet à exécuter pour moi qui inclut toute fonction que vous avez définie.
Une note pour les langues compilées
Le temps de compilation ne doit pas prendre plus d'une minute sur ma machine.
Est-ce réellement possible?
Si vous ignorez les contraintes d'espace, alors chacune peut être prise en compte en moins de 2 secondes sur mon ordinateur en utilisant du code Python + pypy pur.
Qu'est-ce qu'un algorithme d'affacturage non trivial?
L'algorithme rho de Pollard est rapide et adapté au golf. Bien sûr, il existe également de nombreuses autres façons de factoriser un entier .
Le tamis quadratique est encore plus rapide . Cela ressemble à un sérieux défi de le compresser en 140 octets.
Principaux scores
- SEJPM , 10 minutes de pénalité pour le dernier cas de test + 16 secondes à Haskell
2
ou 2, 2
?
2 ** 1024
?