Pagini recente » Cod sursa (job #1530054) | Cod sursa (job #797443) | Cod sursa (job #859481) | Cod sursa (job #493254) | Cod sursa (job #199351)
Cod sursa(job #199351)
#include <cstdio>
#include <cstring>
#include <queue>
using namespace std;
#define MAX_N 2000005
#define INF 0x3f3f3f3f
int n;
int a, b;
int best[MAX_N];
int par[MAX_N];
int cif[MAX_N];
int num[MAX_N];
queue<int> q;
inline int gcd(int a, int b) {
return !b ? a : gcd(b, a%b);
}
int main() {
freopen("multiplu.in", "r", stdin);
freopen("multiplu.out", "w", stdout);
scanf("%d %d", &a, &b);
n = a * b / gcd(a, b);
memset(best, INF, sizeof(best));
best[1 % n] = 1;
cif[1 % n] = 1;
q.push(1 % n);
while (best[0] == INF) {
int val = q.front();
q.pop();
if (best[val] + 1 < best[(val * 10) % n]) {
par[(val * 10) % n] = val;
cif[(val * 10) % n] = 0;
best[(val * 10) % n] = best[val] + 1;
q.push((val * 10) % n);
}
if (best[val] + 1 < best[(val * 10 + 1) % n]) {
par[(val * 10 + 1) % n] = val;
cif[(val * 10 + 1) % n] = 1;
best[(val * 10 + 1) % n ] = best[val] + 1;
q.push((val * 10 + 1) % n);
}
}
int r = 0;
for (int i = best[0]; i; --i) {
num[i] = cif[r];
r = par[r];
}
for (int i = 1; i <= best[0]; ++i)
printf("%d", num[i]);
}