Per un esercizietto sul minimo comune multiplo (mcm[lista di interi]) ci s'è inventato un testo ridicolo: lo "Spoiler" che dà un'orario mentre il quesito chiede la durata di un intervallo; e poi una situazione inventata in modo irrealistico.
Dalle otto a mezzanotte sono sedici ore, 960 minuti:
* 960 = 21*45 + 15 = 32*30 + 0 = 60*16 + 0
quindi per gli autisti delle linee A e B il servizio finisce alla 0:30, mentre quello della linea C (raccomandato!) smonta alle 0:16; se l'addetto ai turni non sta in campana gli arriva una grana sindacale che levati!
------------------------------
Per il calcolo di
* mcm[45, 30, 16] minuti = 720 minuti = 12 ore
il metodo suggerito dai libri per scolari (fattori comuni e non comuni ...) è quello che, in base al Teorema Fondamentale, serve a DIMOSTRARE esistenza e unicità del mcm[] e che però è assolutamente controindicato per CALCOLARE (vale solo per numeri molto piccoli).
Ad esempio, con numeri moderatamente grandicelli, per calcolare con quel metodo
* mcm[102856878774354143, 176276066577834469]
si dovrebbero fare venti milioni di divisioni e ci vorrebbe un po' di tempo.
Invece il metodo di calcolo che s'insegna ai più piccoli dovrebb'essere il più efficiente possibile, basato sulle definizioni della divisione euclidea N/D e del mcm[a, b]
* (N = D*Q(N, D) + R(N, D)) & (0 <= R < |D|)
* mcm[a, b] = |a*b|/MCD[a, b]
e sull'algoritmo di Euclide per calcolare MCD[a, b] che è l'applicazione sistematica di poche proprietà del Massimo Comun Divisore
* MCD[a, 0] = a
* MCD[a, b] = MCD[b, a]
* MCD[a, b] = MCD[a, - b]
* MCD[a, b] = MCD[b, R(a, b)]
---------------
ESEMPIO sui dati del caso
* mcm[45, 30, 16] = mcm[mcm[45, 30], 16] = mcm[|45*30|/MCD[45, 30], 16] =
= mcm[1350/15, 16] = mcm[90, 16] =
= 90*16/MCD[90, 16] = 1440/2 = 720
---------------
DETTAGLI
* MCD[45, 30] = MCD[30, 15] = MCD[15, 0] = 15
* MCD[90, 16] = MCD[16, 10] = MCD[10, 6] = MCD[6, 4] = MCD[4, 2] = MCD[2, 0] = 2