Documente Academic
Documente Profesional
Documente Cultură
De
exemplu, (20,24)=4(20,24)=4, (6,3)=3(6,3)=3, (14,5)=1(14,5)
=1 și (0,18)=18(0,18)=18. Există un singur caz în care
valoarea (a,b) nu e definită, și anume atunci când a=b=0. Asta
pentru că 0 este divizibil cu toate numerele naturale nenule.
Nu putem spune că (a,b)=∞.
Să luăm un exemplu mai mare: a=229320 și b=996072. Dacă
descompunem în factori primi numerele a, b și (a,b), obținem:
De aici observăm că putem defini CMMDC-ul a două numere
drept produsul dintre factorii lor comuni luați la cea mai
mică putere. Este cât se poate de logic: Dacă am scădea
puterea unui factor din descompunerea lui (a,b) am obține un
CMMDC mai mic, iar dacă am mări-o, cel puțin unul dintre
cele două numere nu va mai fi divizibil cu noul CMMDC.
Cel mai mic multiplu comun (CMMMC)
Cel mai mic multiplu comun a două numere naturale nenule
este cel mai mic număr natural nenul care este divizibil atât cu
a, cât și cu b. Acesta se notează cmmmc(a,b), lcm(a,b) (de
la least common multiple) sau [a,b]. De
exemplu, [20,24]=120[20,24]=120, [3,5]=15[3,5]=15, [12,4]=
12[12,4]=12 și [1,7]=1[1,7]=1.
Din nou, vom lua un exemplu mai complex ca să analizăm
descompunerile în factori primi ale
numerelor a, b și [a,b]. Fie a=840 și b=126:
De aici, putem observa că CMMMC-ul a două numere este
egal cu produsul dintre factorii lor comuni și necomuni luați
la cea mai mare putere.
Algoritmul lui Euclid prin scăderi repetate
Algoritmul lui Euclid este o metodă foarte simplă și eficientă
de a calcula CMMDC-ul a două numere. Există două variante
ale Algoritmului lui Euclid: una prin scăderi repetate și
cealaltă prin împărțiri repetate. Prima nu este nici pe departe la
fel de eficientă precum a doua, dar voi începe cu ea pentru că
ne ajută să înțelegem mai ușor varianta prin împărțiri.
Algoritmul lui Euclid prin scăderi repetate presupune să
scădem la fiecare pas numărul mai mic din numărul mai mare,
până când unul dintre ele devine 0. La final, valoarea
numărului care a rămas nenul va fi egală cu(a,b).
while (a && b)
if (a > b)
a -= b;
else
b -= a;
cout << a + b << '\n';
// ...
// ...
int main() {
int a, b; cin >> a >> b;
cout << gcd(a, b) << '\n';
return 0;
}
Problema in C++
int ans = 1;
for (int i = 1; i <= n; i++)
ans = lcm(ans, t[i]);
cout << ans << '\n';