Pagini recente » Cod sursa (job #2340954) | Cod sursa (job #3205303) | Cod sursa (job #934358) | Cod sursa (job #2797318) | Cod sursa (job #120477)
Cod sursa(job #120477)
#include <stdio.h>
#include <bitset>
using namespace std;
#define VMAX 2000010
int A, B, nr;
bitset <VMAX> ap;
int nvec;
int vec[VMAX];
unsigned char predp[VMAX];
int mod[3000];
char sol[3000];
inline int cmmdc(int a, int b)
{
return (!b) ? a : cmmdc(b, a % b);
}
int main()
{
int i;
freopen("multiplu.in", "r", stdin);
freopen("multiplu.out", "w", stdout);
scanf("%d %d", &A, &B);
nr = A * B / cmmdc(A, B);
int mx = 0;
ap[0] = 1;
vec[++nvec] = 0;
mod[0] = 1;
int q = 1, w = 0, nnvec, nval;
while (1) {
nnvec = nvec;
for (i = 1; i <= nvec; i++) {
nval = vec[i] + q;;
if (nval > nr) nval -= nr;
if (ap[nval] == 0) {
vec[++nnvec] = nval;
ap[nval] = 1;
predp[nval] = w;
}
}
nvec = nnvec;
if (ap[nr] == 1) break;
q = (q * 10) % nr;
w++;
mod[w] = q;
}
q = nr;
int pmax = predp[q];
if (pmax > mx) mx = pmax;
while (q) {
sol[predp[q]] = 1;
q = q - mod[predp[q]];
if (q < 0) q += nr;
}
for (i = pmax; i >= 0; i--) printf("%d", sol[i]);
printf("\n");
return 0;
}