Cod sursa(job #2659865)

Utilizator LucaMihaiLM10Luca Ilie LucaMihaiLM10 Data 17 octombrie 2020 17:47:56
Problema Oz Scor 100
Compilator c-64 Status done
Runda Temă divizibilitate & primalitate clasa a 9-a Marime 1.14 kb
#include <stdio.h>
#define NMAX 10000
#define MMAX 100000
#define MAX 2000000000
int x[MMAX], y[MMAX], d[MMAX];
long long v[NMAX];
long long cmmdc( int a, int b ) {
    int r;
    while ( b > 0 ) {
        r = a % b;
        a = b;
        b = r;
    }
    return a;
}
int main() {
    FILE *fin, *fout;
    int n, m, i, j;
    fin = fopen( "oz.in", "r" );
    fscanf( fin, "%d%d", &n, &m );
    for ( i = 0; i < n; i++ )
        v[i] = 1;
    for ( i = 0; i < m; i++ ) {
        fscanf( fin, "%d%d%d", &x[i], &y[i], &d[i] );
        x[i]--;
        y[i]--;
        v[x[i]] = (long long)(v[x[i]] * d[i] / cmmdc( v[x[i]], d[i] ));
        v[y[i]] = (long long)(v[y[i]] * d[i] / cmmdc( v[y[i]], d[i] ));
    }
    fclose( fin );
    j = 0;
    while ( j < n && v[j] > 0 && v[j] <= MAX )
        j++;
    i = 0;
    if ( j == n ) {
        while ( i < m && cmmdc( v[x[i]], v[y[i]] ) == d[i] )
            i++;
    }
    fout = fopen( "oz.out", "w" );
    if ( i == m ) {
        for ( i = 0; i < n; i++ )
            fprintf( fout, "%lld ", v[i] );
    } else
        fprintf( fout, "-1" );
    fclose( fout );
    return 0;
}