Cod sursa(job #2260626)

Utilizator divianegoescuDivia Negoescu divianegoescu Data 15 octombrie 2018 11:36:49
Problema Oz Scor 25
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.49 kb
#include <fstream>
#include <stdio.h>
FILE *fin=fopen("oz.in","r");
using namespace std;
ofstream fout("oz.out");

long long n,i,j,nrmodif;
long long m,k,d;
long long prime[4650];
long long v[10003];
bool c[44725];
void ciur()
{
    long long i,j,nr;
    c[1]=1;
    for(i=2;i<=211;i++)
        if(c[i]==0)
            for(j=i*2;j<=44722;j+=i)
                c[j]=1;
    nr=0;
    for(i=2;i<=44722;i++)
        if(c[i]==0) prime[++nr]=i;

}
void descompuneX(long long x)
{
    long long  p=1;
    if(v[i]==-1)
        {v[i]=1; nrmodif--;}
    if(v[j]==-1)
        {v[j]=1;nrmodif--;}
    while(x>1 && prime[p]<=x/prime[p])
    {
        if(x%prime[p]==0)
        {
            long long factor=1;
            while(x%prime[p]==0)
            {
                factor*=prime[p];
                x/=prime[p];
            }
            while(v[i]%factor!=0)
                v[i]*=prime[p];
            while(v[j]%factor!=0)
                v[j]*=prime[p];
        }
        p++;
    }
    if(x>1)
    {
        if(v[i]%x!=0)
            v[i]*=x;
        if(v[j]%x!=0)
            v[j]*=x;
    }
}
int main()
{

    ciur();
    fscanf(fin,"%lld%lld",&n,&m);
    if(m<n/2){fout<<"-1";return 0;}
    nrmodif=n;
    for(i=1;i<=n;i++)
        v[i]=-1;
    for(k=1;k<=m;k++)
    {
       fscanf(fin,"%lld%lld%lld",&i,&j,&d);
       descompuneX(d);
    }
    if(nrmodif>0){fout<<"-1";return 0;}
    for(k=1;k<=n;k++)
        fout<<v[k]<<" ";
    return 0;
}