Pagini recente » Cod sursa (job #211715) | Cod sursa (job #2223148) | Cod sursa (job #2043082) | Cod sursa (job #2546570) | Cod sursa (job #117195)
Cod sursa(job #117195)
#include<stdio.h>
#define N 300000
int a,b,m,c[N],use0[N],use1[N],up[N],cif[N];
int cmmmc(int x,int y)
{
int r,cx,cy;
cx=x;
cy=y;
while(y)
{
r=x%y;
x=y;
y=r;
}
return cx*cy/x;
}
int gasit_0(int x,int sf)
{
int i;
for(i=1;i<=sf;++i)
if(c[i]%m==(x*10)%m)
return 0;
return 1;
}
int gasit_1(int x,int sf)
{
int i;
for(i=1;i<=sf;++i)
if(c[i]%m==(x*10+1)%m)
return 0;
return 1;
}
int refa(int sf)
{
int i,cc[N],k1=0,x=0;
cc[++k1]=cif[sf];
i=up[sf];
while(i)
{
cc[++k1]=cif[i];
i=up[i];
}
for(i=k1;i>=1;i--)
x=x*10+cc[i];
return x;
}
void solve()
{
int ic,sf,aux;
m=cmmmc(a,b);
c[1]=1;
up[1]=0;
cif[1]=1;
ic=sf=1;
while(ic<=sf)
{
/*if(gasit_0(c[ic],sf))
{
c[++sf]=c[ic]*10+0;
up[sf]=ic;
cif[sf]=0;
}
if(gasit_1(c[ic],sf))
{
c[++sf]=c[ic]*10+1;
up[sf]=ic;
cif[sf]=1;
}*/
aux=refa(ic);
if(!use0[(aux*10)%m])
{
c[++sf]=(aux*10)%m;
up[sf]=ic;
cif[sf]=0;
use0[(aux*10)%m]=1;
}
if(!use1[(aux*10+1)%m])
{
c[++sf]=(aux*10+1)%m;
up[sf]=ic;
cif[sf]=1;
use1[(aux*10+1)%m]=1;
}
if(c[ic]==0)
{
printf("%d\n",aux);
return;
}
ic++;
}
}
int main()
{
freopen("multiplu.in","r",stdin);
freopen("multiplu.out","w",stdout);
scanf("%d%d",&a,&b);
solve();
return 0;
}