Pagini recente » Rating Vasile Calin (cubnt1001) | Cod sursa (job #2982679) | Cod sursa (job #2620144) | Cod sursa (job #3003346) | Cod sursa (job #115064)
Cod sursa(job #115064)
#include <stdio.h>
int cmmdc(int a, int b)
{
if (a % b == 0)
return b;
return cmmdc(b, a % b);
}
int cmmmc(int a, int b)
{
return (a * b) / cmmdc(a, b);
}
#define LMAX 2000100
int i, a, b, li, ls, r, rnext;
int prev[LMAX], q[LMAX];
char digit[LMAX];
int main()
{
freopen("multiplu.in", "r", stdin);
scanf("%d %d", &a, &b);
a = cmmmc(a, b);
//fprintf(stderr, "a=%d\n", a);
for (i = 0; i < a; i++)
prev[i] = -2;
prev[1 % a] = -1;
digit[1 % a] = 1;
li = ls = 0;
q[li] = 1 % a;
while (prev[0] < -1 && li <= ls)
{
r = q[li];
// add the digits 0 & 1
for (i = 0; i <= 1; i++)
{
rnext = (10 * r + i) % a;
if (prev[rnext] < -1)
{
prev[rnext] = r;
digit[rnext] = (char) i;
ls++;
q[ls] = rnext;
}
}
li++;
}
freopen("multiplu.out", "w", stdout);
if (prev[0] < -1)
printf("0\n"); // this should never happen
else
{
// reconstituie solutia
i = 0;
r = 0;
while (prev[r] >= 0)
{
i++;
q[i] = (int) digit[r];
r = prev[r];
}
i++;
q[i] = 1;
for (; i > 0; i--)
printf("%d", q[i]);
printf("\n");
}
return 0;
}