#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
Niciun comentariu:
Trimiteți un comentariu