Ce défi est le premier d'une série de problèmes de moindre opération qui devraient être écrits dans le CPU GOLF . Vous pouvez trouver le suivant ici
Une partition d'un nombre,, N
est une liste de nombres qui s'additionnent N
. Une partition principale est une liste de nombres premiers qui s'additionnent N
.
Pour ce défi, vous recevez un seul entier N ≥ 2
. Vous devez générer la partition principale la plus courte possible pour N
. S'il existe plusieurs partitions possibles, vous pouvez imprimer n'importe laquelle d'entre elles.
Exemples:
9: [2, 7]
12: [5, 7]
95: [89, 3, 3]
337: [337]
1023749: [1023733, 13, 3]
20831531: [20831323, 197, 11]
Votre programme doit être écrit en GOLF CPU . Pour les entrées / sorties, vous pouvez utiliser STDIO ou les registres. La liste peut être dans n'importe quel ordre, et si vous utilisez STDOUT, elle peut être séparée par des espaces ou des virgules (aucun crochet nécessaire). De toute évidence, le codage en dur des solutions n'est pas autorisé, ni le codage en dur plus que les premiers nombres premiers.
Il s'agit d'un problème de moindre opération , donc la réponse qui résout les exemples ci-dessus avec le moins de cycles gagne!
la source
Réponses:
159326251 cycles
L' entrée est
n
, la sortie estr
,s
ett
(sans tenir compte des zéros).Testcases:
la source
Nombre total de cycles pour les exemples: 477 918 603
Mise à jour 1: mise à jour pour utiliser la conjecture de Lemoine .
Mise à jour 2: mise à jour pour utiliser le tamis d'Ératosthène au lieu de trouver naïvement les nombres premiers.
Courir avec:
Exemple d'exécution:
Nombre de cycles pour exemple d'entrée:
Nous considérons les premiers
(N+1)*8
octets du tas, comme un tableau contenantN+1
des valeurs 64 bits. (Comme le tas est de taille limitée, cela ne fonctionnera que pourN < 2^57
). La valeur de l'entrée ài*8
indique sii
c'est un nombre premier:Lorsque nous aurons terminé de construire le tableau, il ressemblera
[-1, -1, 3, 5, -1, 7, -1, 11, -1, -1, -1, 13, ...]
.Nous utilisons le tamis d'Eratosthène pour construire le tableau.
Ensuite, le programme fait ce qui suit en pseudo-code:
Cela est garanti de fonctionner en raison de la conjecture de Lemoine et de la faible conjecture de Goldbach . La conjecture de Lemoine n'a pas encore été prouvée, mais c'est probablement vrai pour les nombres inférieurs à 2 ^ 57.
la source