Inspiré par Cheap, Fast, Good , nous allons implémenter un algorithme qui en a exactement deux.
Les maths
Étant donné deux entiers non nuls a et b , le GCF d est le plus grand entier qui divise à la fois a et b sans reste. Les coefficients de Bézout sont des paires d'entiers (x, y) telles que ax + by = d . Les coefficients de Bézout ne sont pas uniques. Par exemple, étant donné:
a = 15, b = 9
On a
d = 3
x = 2
y = -3
Depuis 15*2 + 9*(-3) = 30 - 27 = 3
.
Une façon courante de calculer le GCF et une paire de coefficients de Bézout est d'utiliser l'algorithme d'Euclide , mais ce n'est en aucun cas le seul moyen.
Le code
Votre programme doit prendre deux entiers en entrée. Il doit produire / renvoyer le plus grand facteur commun et une paire de coefficients de Bézout.
Exemple d'entrée:
15 9
exemple de sortie
3 (2, -3)
La sortie peut être dans n'importe quel ordre et format, mais il doit être clair quel est le GCF et quels sont les coefficients.
Les sournois
Votre programme a le potentiel d'être bon marché, rapide et bon. Malheureusement, il ne peut y en avoir que deux à la fois.
- Lorsqu'il n'est pas bon marché , le programme doit utiliser une quantité excessive de ressources système.
- Lorsqu'il n'est pas rapide , le programme devrait prendre trop de temps.
- Quand ce n'est pas bon , la sortie du programme devrait être fausse.
Le programme devrait être capable de faire (enfin, ne pas faire) les trois. C'est à vous de décider - cela peut être basé sur l'heure, le compilateur, quelle entrée est plus grande, etc. Quelques notes supplémentaires:
- Votre programme ne doit pas être visiblement sournois et doit passer une inspection superficielle. Je serais un peu méfiant si vous implémentiez trois algorithmes distincts.
- Dans le cas bon marché , «une quantité excessive de ressources système» est tout ce qui pourrait ralentir d'autres programmes. Il peut s'agir de mémoire, de bande passante, etc.
- Dans le cas rapide , «temps excessif» signifie par rapport à la façon dont il fonctionne dans les cas bon marché et bons . Le programme devrait encore se terminer. Plus vous vous rapprochez de "incroyablement frustrant mais pas assez frustrant pour arrêter le programme", mieux c'est (drôle et).
- Dans le bon cas, la sortie ne doit pas être manifestement fausse et doit passer une inspection superficielle. Je serais très méfiant si cela me donnait un GCF de "2 anna half".
Il s'agit d'un concours de popularité, donc la plupart des votes positifs gagnent!
ÉDITER
Pour clarifier, je suis à la recherche des programmes qui peuvent être « rapide et pas cher » et « bon et pas cher » et « rapide et bon » dans les différents cas, pas ceux qui ne seul d'entre eux.
la source
Réponses:
C
C'est bon marché et rapide. Vous obtenez un gcd en un clin d'œil. Cependant, le gars qui l'a fait n'avait aucune idée de ce "co-quelque chose de Bézier" alors il a simplement divisé a et b par pgcd. (pour aggraver les choses, à ce point a et b sont assez loin de leur valeur initiale en raison de l'algorithme qu'il a judicieusement choisi)
la source
C #
Ceci calcule les coefficients de Bézout. J'ai utilisé l' algorithme euclidien étendu .
la source
Perl 5
Pas bon marché: main () est appelée récursivement (en remplissant la pile) jusqu'à ce qu'un avertissement de "récurrence profonde" soit déclenché par perl qui quittera l'application en raison du gestionnaire __WARN__.
Pas rapide: lorsque les algorithmes gcf () retournent des résultats corrects, le code se bloque pendant quelques secondes (select () dans main ()).
Pas bon: tous les résultats supérieurs à 99 (ou inférieurs à -99) sont incorrects.
Dans l'ensemble, pas si créatif; dans l'attente de réponses plus élégantes.
la source
Python
C'est bon marché et rapide, mais c'est mauvais dans le fait que la plage est plafonnée à l'entrée la plus grande, de sorte qu'il peut ne pas trouver une paire de coefficients.
Bon puzzle.
la source
Javascript
Pas cher
Utilise beaucoup de ressources système.
Pas vite
Utilisez un rappel, tout comme une sécurité supplémentaire.
Pas bon
Limite stricte de
gcf(10, 10)
, juste pour un espace disque sûr.la source