Cod sursa(job #147053)

Utilizator hadesgamesTache Alexandru hadesgames Data 2 martie 2008 15:39:19
Problema Multiplu Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.27 kb
#include <stdio.h>
FILE *in,*out;
char e[2000002];
int  d[100002];
int  c[100002][30];
int b,cmc,r,a,x,i,j,p,u;
void af(int x)
{
	int i;
	for (i=c[x][0];i>=1;i--)
		fprintf(out,"%d",c[x][i]);
	fprintf(out,"\n");
}
int main()
{
	in=fopen("multiplu.in","r");
	out=fopen("multiplu.out","w");
	fscanf(in,"%d%d",&a,&b);
	cmc=a*b;
	r=a%b;
	while (r)
	{
		a=b;
		b=r;
		r=a%b;
	}
	cmc/=b;
	if (cmc==1)
	{
		fprintf(out,"1\n");
		fclose(in);
		fclose(out);
		return 0;
	}
	p=1;
	c[1][0]=1;
	c[1][1]=1;
	d[1]=1;
	while(666999)
	{
		u=p;
		for (i=1;i<=p;i++)
		{
			x=d[i]*10;
			if (!e[(x+1)%cmc])
			{
				u++;
				c[u][0]=c[i][0]+1;
				for (j=1;j<=c[i][0];j++)
					c[u][j]=c[i][j];
				c[u][c[u][0]]=1;
				d[u]=(x+1)%cmc;
				e[d[u]]=1;
				if (d[u]==0)
				{
					af(u);
					fclose(in);
					fclose(out);
					return 0;
				}
			}
			if (!e[x%cmc])
			{
				u++;
				c[u][0]=c[i][0]+1;
				for (j=1;j<=c[i][0];j++)
					c[u][j]=c[i][j];
				c[u][c[u][0]]=0;
				d[u]=x%cmc;
				e[d[u]]=1;
				if (d[u]==0)
				{
					af(u);
					fclose(in);
					fclose(out);
					return 0;
				}
			}
			
		}
		for (i=p+1;i<=u;i++)
		{
			for (j=0;j<=c[i][0];j++)
				c[i-p][j]=c[i][j];
			d[i-p]=d[i];
		}
		p=u-p;
	}
	return 0;
}