CMMDC
Explici cel mai mare divizor comun.
Algoritmul lui Euclid prin scăderi și resturi și calculul CMMMC.
Explici cel mai mare divizor comun.
Aplici varianta cu scăderi și varianta cu resturi.
Calculezi cel mai mic multiplu comun folosind CMMDC.
Compari cele două variante ale algoritmului.
În algoritmul lui Euclid cu resturi, când ne oprim?
Pentru două numere naturale nenule a și b, un divizor comun divide atât pe a, cât și pe b. CMMDC(a,b) este cel mai mare dintre divizorii comuni.
Pentru 24 și 36, divizorii comuni sunt 1, 2, 3, 4, 6, 12, deci CMMDC(24,36)=12.
Dacă x>y, înlocuim x cu x−y; dacă y>x, înlocuim y cu y−x. Repetăm până când x=y.
Dacă a=b·q+r, atunci CMMDC(a,b)=CMMDC(b,r). Pentru 84 și 30 obținem 24, apoi 6, apoi 0.
CMMMC(a,b) este cel mai mic multiplu pozitiv comun. Pentru a,b pozitive: CMMMC(a,b)=a·b/CMMDC(a,b).
Ai benzi de 24 cm și 36 cm și vrei bucăți egale cât mai mari, fără rest. Lungimea maximă este 12 cm, adică CMMDC(24,36).
Două semafoare repetă ciclurile la 6 și 8 secunde. Prima sincronizare după pornire apare după CMMMC(6,8)=24 secunde.
În algoritmul lui Euclid pentru (84,30), după 84 % 30 = 24, ce pereche urmează?
def cmmdc_scadere(a, b):
while a != b:
if a > b:
a = a - b
else:
b = b - a
return adef cmmdc(a, b):
while b != 0:
a, b = b, a % b
return adef cmmmc(a, b):
return a * b // cmmdc(a, b)Formula folosește CMMDC și este mult mai directă decât enumerarea multiplilor.
citește a, b
cât timp b ≠ 0 execută
r ← a mod b
a ← b
b ← r
sfârșit cât timp
scrie acitește a, b
d ← CMMDC(a,b)
m ← a · b div d
scrie mNu confundați condiția a=b din varianta cu scăderi cu b=0 din varianta cu resturi.
Calculați restul înainte de a modifica valorile.
% este restul, // este câtul întreg.
Testarea observă comportamentul pe date; verificarea justifică de ce algoritmul produce rezultatul corect.
Se citesc a și b. Determinați CMMDC și CMMMC.
Pentru 84 și 30: 84%30=24, 30%24=6, 24%6=0. Ultima valoare nenulă este 6.
def cmmdc(a, b):
while b != 0:
a, b = b, a % b
return a
a = int(input())
b = int(input())
d = cmmdc(a, b)
m = a * b // d
print(d)
print(m)| a | b | r |
|---|---|---|
| 84 | 30 | 24 |
| 30 | 24 | 6 |
| 24 | 6 | 0 |
Teste: (84,30), numere egale, numere prime între ele și cazul în care unul îl divide pe celălalt.
6 divide atât 84, cât și 30 și niciun divizor comun mai mare decât 6 nu le divide pe ambele. CMMMC=84·30/6=420.
Construiește o aplicație cu funcția cmmdc și calculează atât latura maximă a unei dale pătrate pentru un dreptunghi, cât și prima sincronizare a două semafoare.
Recitește explicațiile și verifică rezultatele înainte de a marca lecția.