Pagini recente » Cod sursa (job #1165004) | Cod sursa (job #1755957) | Cod sursa (job #2110639) | Cod sursa (job #1620351) | Cod sursa (job #2711690)
#include <fstream>
using namespace std;
ifstream fin("multiplu.in");
ofstream fout("multiplu.out");
const int NMAX = 2000001;
struct MULTIPLU
{
bool c;
int r, pred;
};
MULTIPLU q[NMAX];
bool viz[NMAX], sol[NMAX];
int cmmdc(int a, int b)
{
int r;
while (b != 0)
{
r = a % b;
a = b;
b = r;
}
return a;
}
int cmmmc(int a, int b)
{
int c;
c = cmmdc(a, b);
return a * b / c;
}
int main()
{
int A, B, M, p, u, ok, i, n;
n = 0;
fin >> A >> B;
if (A == 1 && B == 1)
{
fout << 1;
return 0;
}
M = cmmmc(A, B);
MULTIPLU temp1, temp2;
p = 1; u = 0;
temp1.c = 1; temp1.r = 1; temp1.pred = 0;
viz[1] = 1;
q[++u] = temp1;
ok = 0;
while (p <= u && ok == 0)
{
temp1 = q[p];
temp2.c = 0;
temp2.r = (temp1.r * 10) % M;
temp2.pred = p;
if (viz[temp2.r] == 0)
{
viz[temp2.r] = 1;
q[++u] = temp2;
}
if (temp2.r == 0)
{
ok = 1;
break;
}
temp2.c = 1;
temp2.r = (temp1.r * 10 + 1) % M;
temp2.pred = p;
if (viz[temp2.r] == 0)
{
viz[temp2.r] = 1;
q[++u] = temp2;
}
if (temp2.r == 0)
{
ok = 1;
break;
}
p++;
}
while (u != 0)
{
sol[++n] = q[u].c;
u = q[u].pred;
}
for (i = n; i >= 1; i--)
fout << sol[i];
return 0;
}