#include <iostream>
using namespace std;
int main() {
int a, b, divizor, putereA, putereB, rezultat = 1;
cin >> a;
cin >> b;
int maxDiv = a / 2;
int sqrtB = b / 2;
if (maxDiv < sqrtB) {
maxDiv = sqrtB;
}
for (divizor = 2; divizor <= maxDiv; divizor++) {
if (a % divizor == 0 && b % divizor == 0) {
putereA = 0;
putereB = 0;
while (a % divizor == 0) {
a = a / divizor;
putereA++;
}
while (b % divizor == 0) {
b = b / divizor;
putereB++;
}
if (putereA > putereB) {
while (putereA > 0) {
rezultat = rezultat * divizor;
putereA--;
}
} else {
while (putereB > 0) {
rezultat = rezultat * divizor;
putereB--;
}
}
} else {
if (a % divizor == 0) {
while (a % divizor == 0) {
a = a / divizor;
rezultat = rezultat * divizor;
}
} else {
if (b % divizor == 0) {
while (b % divizor == 0) {
b = b / divizor;
rezultat = rezultat * divizor;
}
}
}
}
}
cout << "rez=" << rezultat;
return 0;
}
O versiune mai rafinata a programului de mai sus
#include <iostream>
using namespace std;
void getDiv(int &a, int d, int &r) {
r = 0;
while (!(a % d)) {
a = a / d;
r++;
}
}
void addRez(int &rez, int &a, int d) {
while (!(a % d)) {
a = a / d;
rez = rez * d;
}
}
int main() {
int a, b, divizor, putereA, putereB, rezultat = 1;
cin >> a;
cin >> b;
int maxDiv = a > b ? a : b;
maxDiv /= 2;
for (divizor = 2; divizor <= maxDiv; divizor++) {
if (a % divizor || b % divizor) {
getDiv(a, divizor, putereA);
getDiv(b, divizor, putereB);
if (putereA > putereB) {
while (putereA) {
rezultat = rezultat * divizor;
putereA--;
}
} else {
while (putereB) {
rezultat = rezultat * divizor;
putereB--;
}
}
} else {
if (!(a % divizor)) {
addRez(rezultat, a, divizor);
} else {
if (!(b % divizor)) {
addRez(rezultat, b, divizor);
}
}
}
}
cout << "rez= " << rezultat;
return 0;
}
propuneri de enunturi


















