Cod sursa(job #165980)

Utilizator andumMorie Daniel Alexandru andum Data 27 martie 2008 11:14:49
Problema Oz Scor 45
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.07 kb
# include <stdio.h>
# include <math.h>

FILE *f,*g;

long long n,m,l,v[10000],ok,a[100000][3],i,j,d,p,q;

long long cmmdc(long long a,long long b)
{
 long long r=0;
 r=a%b;
 while (r!=0)
	{
	 a=b;
	 b=r;
	 r=a%b;
	}
 return b;
}

long long cmmmc(long long a,long long b)
{
 long long q;
 q=(a*b)/cmmdc(a,b);
 if (q<0) return 1;
   else return q;
}

int main()
{

 f=fopen("oz.in","r");
 g=fopen("oz.out","w");

 fscanf(f,"%lld %lld", &n, &m);
 for (i=1;i<=n;i++)
	v[i]=1;
 for (l=1;l<=m;l++)
	{
	 fscanf(f,"%lld %lld %lld", &a[l][1], &a[l][2], &a[l][3]);
	 d=a[l][3];
	 i=2;
	 while (d!=1)
		{
		 p=0;
		 while (d%i==0) {
				 p++;
				 d/=i;
				}
		 if (p)
		 {
		  q=pow(i,p);
		  while (v[a[l][1]]%q!=0)
				 v[a[l][1]]*=i;
		  while (v[a[l][2]]%q!=0)
				 v[a[l][2]]*=i;
		 }
		 i++;
		}
	}
 fclose(f);
 ok=1;
 for (i=1;i<=m;i++)
	{
	 if (cmmdc(v[a[i][1]],v[a[i][2]])!=a[i][3])
			{
			 ok=0;
			 fprintf(g,"-1");
			 break;
			}
	}
 if (ok)
 for (i=1;i<=n;i++)
	fprintf(g,"%lld ", v[i]);
 fclose(g);
 return 0;
}