Cod sursa(job #205304)

Utilizator vlad.maneaVlad Manea vlad.manea Data 30 august 2008 20:23:43
Problema Oz Scor 25
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.41 kb
#include <stdio.h>
#define nmax 10005
#define lmax 10

unsigned long long N, M, x, y, z, i, r, j, k, p, m;
unsigned long long prim[] = {0, 2, 3, 5, 7, 11, 13, 17, 19, 23}, prod[nmax][lmax], cate[lmax];

unsigned long long minim(unsigned long long l, unsigned long long r)
{
	return l < r? l: r;
}

unsigned long long maxim (unsigned long long l, unsigned long long r)
{
	return l < r? r: l;
}

int main()
{
	freopen("oz.in", "r", stdin);
	freopen("oz.out", "w", stdout);

	scanf("%llu%llu", &N, &M);

	while (M--)
	{
		scanf("%llu%llu%llu", &x, &y, &z);

		for (i = 1; i < lmax; cate[i] = 0, ++i);

		for (i = 1; i < lmax && z > 1; i++)
			for (; z > 1 && z % prim[i] == 0; ++cate[i], z /= prim[i]);

		for (i = 1; i < lmax; ++i)
			if (cate[i])
			{
				prod[x][i] = maxim(prod[x][i], cate[i]);
				prod[y][i] = maxim(prod[y][i], cate[i]);
			}
	}

/*

	fseek(stdin, 0, SEEK_SET);

	scanf("%llu%llu", &N, &M);

	for (; !r && M; M--)
	{
		scanf("%llu%llu%llu", &x, &y, &z);

		for (p = i = 1; i < lmax; ++i)
			for (m = minim(prod[x][i], prod[y][i]), j = 1; j <= m; p *= prim[i], ++j);

		if (p != z) r = 1;
	}

	if (!r)
	{

	*/

		for (i = 1; i <= N; ++i)
		{
			for (p = k = 1; k < lmax; ++k)
				for (j = 1; j <= prod[i][k]; p *= prim[k], ++j);

			if (i < N) printf("%llu ", p);
			else printf("%llu\n",p);
		}

/*

	}
	else
		printf("-1\n");

*/

	return 0;
}