Pagini recente » Cod sursa (job #2092311) | Cod sursa (job #407023) | Cod sursa (job #1512315) | Cod sursa (job #2524276) | Cod sursa (job #2941100)
#include <fstream>
#include <math.h>
using namespace std;
ifstream in ("oz.in"); ofstream out ("oz.out");
int N, M; /// un vector cu N numere; M triplete
int v[10001] = {1};
int cmmmc(int a, int b){
int rezultat = 1, maxab;
/// puterile comune si necomune la puterea cea mai mare
/// a * b = cmmmc (a,b) * cmmdc (a,b)
a < b ? maxab = b : maxab = a;
for(int i = 2; i < maxab; i++){
int cont1 = 0, cont2 = 0;
while(a % i == 0 && a > 0){cont1++; a = a / i;}
while(b % i == 0 && b > 0){cont2++; b = b / i;}
cont1 < cont2 ? rezultat *= pow(i,cont2) : rezultat *= pow(i,cont1);
}
return rezultat;
}
int cmmdc(int a, int b){
int rezultat = a * b / cmmmc(a,b);
return rezultat;
}
int main(){
bool solutie = true;
struct ijd{
int i, j, d;
}triplet[M+1];
for(int x = 0 ; x < M; x++){
/**< Se memoreaza tripletele pentru a se putea verifica vectorul final */
in >> triplet[x].i >> triplet[x].j >> triplet[x].d;
v[triplet[x].i] = cmmmc(v[triplet[x].i],triplet[x].d);
v[triplet[x].j] = cmmmc(v[triplet[x].j],triplet[x].d);
}
/**< Verificare */
/// se parcurg din nou tripletele
/// daca un triplet i j d nu se verifica solutie = false
for(int x = 0 ; x < M; x++){
if(cmmdc(v[triplet[x].i],(v[triplet[x].i])) != triplet[x].d) solutie = false;
/// verificare cmmdc de vi si vj = d alfel solutie = false
}
if(solutie == true) for(int x = 0 ; x < N; x++) out << v[x];
else out << "-1";
in.close(); out.close();
return 0;
}