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.