Cod sursa(job #115655)

Utilizator IgnitionMihai Moraru Ignition Data 16 decembrie 2007 19:15:54
Problema Multiplu Scor 0
Compilator c Status done
Runda Arhiva de probleme Marime 0.88 kb
#include <stdio.h>

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

	int A, B, N, R, r, a = 0, b = 0, c = 0, P, p;
	int i, j;

	scanf("%d %d", &A, &B);

	// Decompose A*B
	for(N = A*B; N > 1 && N%2 == 0; N /= 2, ++a);
	for(; N > 1 && N%5 == 0; N /= 5, ++b);
	for(; N > 1 && N%3 == 0; N /= 3, ++c);
	//printf("%d %d %d\n", a, b, c);
	//printf("%d\n", N);
	
	// Find period length
	r = R = 1%N;
	p = 0;
	do {
		r *= 10;
		r = r%N;
		++p;
	} while(r != R);
	//printf("%d\n", p);

	// Find the shortest
	for(i = p/2; i >= 1; --i) if(p%i == 0)
		break;
	if(i < 1)
		i = 1;
	P = p;
	p = i;
	//printf("%d %d\n", P, p);

	for(j = 1, i = 0; i < c; ++i, j *= 3);
	//printf("%d\n", j);
	for(; j > 0; --j) {
		for(i = P-p; i >= 0; --i) if(i%p == 0)
			printf("1");
		else printf("0");
	}
	if(b > a)
		a = b;
	for(i = 0; i < a; ++i)
		printf("0");
	printf("\n");

	return 0;
}