Ispirati da Cheap, Fast, Good , implementeremo un algoritmo che ne ha esattamente due.
La matematica
Dati due numeri interi non nulli una e B , la GCF d è il numero intero più grande che divide sia un e b senza residuo. I coefficienti di Bézout sono coppie di numeri interi (x, y) tali che ax + di = d . I coefficienti di Bézout non sono unici. Ad esempio, dato:
a = 15, b = 9
abbiamo
d = 3
x = 2
y = -3
Da allora 15*2 + 9*(-3) = 30 - 27 = 3
.
Un modo comune per calcolare il GCF e una coppia di coefficienti di Bézout è usare l'algoritmo di Euclide , ma non è affatto l'unico modo.
Il codice
Il tuo programma dovrebbe prendere due numeri interi come input. Dovrebbe produrre / restituire il massimo fattore comune e una coppia di coefficienti di Bézout.
Esempio di input:
15 9
esempio di output
3 (2, -3)
L'output può essere in qualsiasi ordine e formato, ma dovrebbe essere chiaro quale sia il GCF e quali siano i coefficienti.
The Underhanded
Il tuo programma ha il potenziale per essere economico, veloce e buono. Sfortunatamente, possono essere solo due di quelli contemporaneamente.
- Quando non è economico , il programma dovrebbe utilizzare una quantità eccessiva di risorse di sistema.
- Quando non è veloce , il programma dovrebbe richiedere un tempo eccessivo.
- Quando non va bene , l'output del programma dovrebbe essere sbagliato.
Il programma dovrebbe essere in grado di fare (bene, non fare) tutti e tre. Il che fa quando dipende da te, potrebbe essere basato sul tempo, sul compilatore, su quale input è più grande, ecc. Alcune note aggiuntive:
- Il tuo programma non dovrebbe essere ovviamente subdolo e dovrebbe passare un controllo superficiale. Sarei un po 'sospettoso se implementassi tre algoritmi separati.
- Nel caso economico , "una quantità eccessiva di risorse di sistema" è qualcosa che potrebbe rallentare altri programmi. Potrebbe essere memoria, larghezza di banda, ecc.
- Nel caso rapido , "tempo eccessivo" significa rispetto a come funziona nei casi economici e buoni . Il programma dovrebbe ancora terminare. Il più vicino possibile a "incredibilmente frustrante ma non abbastanza frustrante per fermare il programma" il (più divertente e) migliore.
- Nel buon caso, l'output non dovrebbe essere ovviamente sbagliato e dovrebbe passare un controllo superficiale. Sarei molto sospettoso se mi desse un GCF di "2 anna half".
Questo è un concorso di popolarità, quindi vince la maggior parte dei voti!
MODIFICARE
Per chiarire, sto cercando programmi che possano essere "veloci ed economici" e "economici e buoni" e "veloci e buoni" in diversi casi, non quelli che ne fanno solo uno.