Cod sursa(job #334479)

Utilizator cosmin79Carabet Cosmin Andrei cosmin79 Data 26 iulie 2009 22:14:55
Problema Multiplu Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.14 kb
#include <stdio.h>
#define N 2000005
#define P 1<<18
int a,b,m,r,pozitie;
char marc[N];
char cif[N];
int din[N];
char sol[P];
int coada[N];
int cmmdc(int x,int y)   
{   
    int r=x%y;
    while(r)   
    {   
        x=y;   
        y=r;   
        r=x%y;   
    }   
    return y;   
}   
int cmmmc(int a,int b)  
{  
	return (int)((long long)a*b/cmmdc(a,b));  
}  
void solve()
{
	marc[1]=1;
	cif[1]=1;
	coada[++coada[0]]=1;
	int i,t,ant=0,act;
	while (marc[0]==0)
	{
		act=coada[0];
		for (i=ant+1; i<=act; i++)
			{
				t=(coada[i]*10)%m;
				if (marc[t]==0)
				{
					coada[++coada[0]]=t;
					marc[t]=1;
					din[t]=coada[i];
					cif[t]=0;
				}
				t=(t+1)%m;
				if (marc[t]==0)
				{
					coada[++coada[0]]=t;
					marc[t]=1;
					din[t]=coada[i];
					cif[t]=1;
				}
			}
		ant=act;
	}
	pozitie=0;
	while (din[pozitie])
	{
		sol[++r]=cif[pozitie];
		pozitie=din[pozitie];
	}
	sol[++r]=1;
	for (i=r; i>=1; i--)
		printf("%d",sol[i]);
}
int main()
{
	freopen("multiplu.in","r",stdin);
	freopen("multiplu.out","w",stdout);
	scanf("%d%d",&a,&b);
	m=cmmmc(a,b);
	solve();
	return 0;
}