Pagini recente » Cod sursa (job #857932) | Cod sursa (job #982600) | Cod sursa (job #476866) | Cod sursa (job #100389) | Cod sursa (job #733586)
Cod sursa(job #733586)
/*
#include <fstream>
#include <deque>
using namespace std;
ifstream F("multiplu.in");
ofstream G("multiplu.out");
#define Qu(x) x.close();
void Cf(){Qu(F)Qu(G)}
#define ll long long
#define AB 2000011
#define Coada deque<int>
int A,B,Mod;
int Nbr;
bool ok[AB];
int Back[AB],Act[AB];
Coada Q,T,Sec;
inline int cmmdc(int A,int B)
{ return ( B==0 ) ? A : cmmdc( B, A%B ); }
inline int cmmmc(int A,int B)
{ return A*B/cmmdc(A,B); }
int main(void)
{
F>>A>>B;
Mod=cmmmc(A,B);
ok[1]=1;
Q.push_front(1);
T.push_front(0);
while ( !ok[0] )
{
while ( !Q.empty() )
{
Back[ Q.front() ]= T.front() ;
Q.pop_front();
Sec.push_front( Q.front() );
T.pop_front();
}
while ( !Sec.empty() )
{
int El2=Sec.front();
int El=El2*10;
El= ( El>Mod )? El-Mod : El ;
if ( ! ok[El] )
{
Act[ El ]=0;
Q.push_front( El );
T.push_front( El2 );
}
El=El2*10+1;
El= ( El>Mod )? El-Mod : El ;
if ( ! ok[El] )
{
Act[ El ]=1;
Q.push_front( El );
T.push_front( El2 );
}
Sec.pop_front();
}
}
Cf();
}
*/
#include <cstdio>
using namespace std;
inline int cmmdc(int a, int b)
{ if (a % b == 0) return b;
return cmmdc(b, a % b); }
inline 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);
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];
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");
else
{
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;
}