Une paire amusante d'équivalences est 1 + 5 = 2 · 3 et 1 · 5 = 2 + 3 . Il y en a beaucoup comme ceux-ci, un autre est 1 + 1 + 8 = 1 · 2 · 5 et 1 · 1 · 8 = 1 + 2 + 5 . En général, un produit de n entiers positifs est égal à une somme de n entiers positifs, et vice versa.
Dans ce défi, vous devez générer toutes ces combinaisons d'entiers positifs pour une entrée n> 1 , à l'exclusion des permutations. Vous pouvez les afficher dans n'importe quel format raisonnable. Par exemple, toutes les solutions possibles pour n = 3 sont:
(2, 2, 2) (1, 1, 6)
(1, 2, 3) (1, 2, 3)
(1, 3, 3) (1, 1, 7)
(1, 2, 5) (1, 1, 8)
Le programme qui peut générer le plus de combinaisons pour le n le plus élevé en une minute sur mes 2 Go de RAM , un ordinateur portable Intel Ubuntu 64 bits gagne. Si votre réponse utilise plus de 2 Go de RAM ou est écrite dans une langue que je ne peux pas tester avec un logiciel disponible gratuitement, je ne noterai pas votre réponse. Je vais tester les réponses dans deux semaines et choisir le gagnant. Les réponses non concurrentes ultérieures peuvent toujours être publiées bien sûr.
Comme on ne sait pas quels sont les ensembles complets de solutions pour tous les n , vous êtes autorisé à publier des réponses qui génèrent des solutions incomplètes. Cependant, si une autre réponse génère une solution (plus) complète, même si leur n maximum est plus petit , cette réponse l'emporte.
Pour clarifier, voici le processus de notation pour décider du gagnant:
Je vais tester votre programme avec n = 2, n = 3, etc ... Je stocke toutes vos sorties et m'arrête lorsque votre programme prend plus d'une minute ou plus de 2 Go de RAM. Chaque fois que le programme est exécuté pour une entrée donnée n, il sera interrompu s'il prend plus d'une minute.
Je regarde tous les résultats pour tous les programmes pour n = 2. Si un programme a produit des solutions moins valides qu'un autre, ce programme est éliminé.
Répétez l'étape 2 pour n = 3, n = 4, etc ... Le dernier programme en attente l'emporte.
la source
Réponses:
C (gcc) , n = 50000000 avec 6499 résultats en 59 s
Pour éviter de produire plus d'un téraoctet de sortie composé presque entièrement de 1s, une séquence de (disons) 49999995 1s est abrégée en
1x49999995
.Essayez-le en ligne!
la source
Mathematica, n = 293 avec 12 solutions
OP a changé le défi et demande une entrée
Voici le nouveau code qui prend tout n comme entrée
Pour n = 293, vous obtenez les 12 solutions
contribution
Vous pouvez tester cet algorithme sur Wolfram Sandbox qui est un logiciel en ligne disponible gratuitement.
Suivez simplement le lien, collez le code (ctrl + v), collez l'entrée à la fin du code et appuyez sur Maj + Entrée pour exécuter.
Vous obtiendrez toutes mes solutions en quelques secondes
Voici également Essayez-le en ligne!en C ++ (gcc)
(Un grand merci à @ThePirateBay pour avoir supporté et traduit mon code dans un langage gratuit)
ce programme ne génère que des solutions de la forme {a, b, c} {a, b, c}
ce qui signifie a + b + c = a * b * c
Il faut 1 seconde pour calculer
les douze solutions sont:
la source
Python 2 , n = 175, 28 résultats en 59s
Rendu un peu plus lent en utilisant un facteur de réduction 2, mais obtient plus de solutions à partir de n = 83
J'obtiens des résultats pour n jusqu'à 92 sur TIO en une seule fois.
Essayez-le en ligne!
la source
Ruby , n = 12 obtient 6 solutions
Au moins sur TIO, résultats habituels de 1 à 11
Essayez-le en ligne!
Obtient 10 résultats en moins d'une minute pour n = 13 sur mon ordinateur portable.
la source
Mathematica, n = 19 avec 11 solutions
c'est ma nouvelle réponse selon les nouveaux critères d'OP
si vous donnez une entrée [n] à la fin, le programme affiche les solutions
voici mes résultats (sur mon ancien portable 64 bits 2,4 GHz)
la source
Haskell, beaucoup de solutions rapidement
f
calcule les solutions, lamain
fonction ajoute l'obtention de l'entrée à partir de la ligne de commande et un certain formatage et comptage.la source
ghc -O3 -o prodsum prodsum.hs
et exécutez avec l'argument de ligne de commande:./prodsum 6
Haskell , n = 10 avec 2 solutions
Cela fonctionne comme de la merde, mais je l'ai au moins corrigé, donc je relève le défi maintenant!
Essayez-le en ligne!
la source
Axiome, n = 83 en 59 secondes ici
résultats:
La façon d'exécuter le texte au-dessus d'Axiom serait de copier tout ce texte dans un fichier, d'enregistrer le fichier sous le nom: Name.input, dans une fenêtre Axiom, utilisez ") read absolutepath / Name".
résultats: (# f (i) trouve la longueur du tableau f (i), c'est-à-dire le nombre de solutions)
la source