Cod sursa(job #163302)

Utilizator C_OvidiuCotletz Ovidiu C_Ovidiu Data 21 martie 2008 22:12:10
Problema Multiplu Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.22 kb
#include<stdio.h>
#include<fstream.h>
long A,B,M;
long max (long A,long B) {return A>B?A:B;}
void citire()
{

freopen("multiplu.in","r",stdin);
scanf("%ld%ld",&A,&B);
long i,j,diva[100],divb[100],nra[100],nrb[100],viz[100],tm;
memset(diva,0,sizeof(diva));
memset(divb,0,sizeof(diva));
memset(nra,0,sizeof(diva));
memset(nrb,0,sizeof(diva));
memset(viz,0,sizeof(diva));
M=1;

for(i=2;i<=A;i++)
  if(!(A%i))
   {diva[++diva[0]]=i;
	while(!(A%i)&&A)
	 {A/=i;
	  nra[diva[0]]++;
	  }
   }
for(i=2;i<=B;i++)
  if(!(B%i))
   {divb[++divb[0]]=i;
	while(!(B%i)&&B)
	 {B/=i;
	  nrb[divb[0]]++;
	  }
   }

M=1;
memset(viz,0,sizeof(viz));

for(i=1;i<=diva[0];i++)
  {
   for(j=1,tm=nra[i];j<=divb[0];j++)
	 if(diva[i]==divb[j])
	   {
	   viz[j]=1;
	   tm=max(tm,nrb[j]);
	   }
   for(j=1;j<=tm;j++)
	 M*=diva[i];
   }
for(i=1;i<=divb[0];i++)
 if(!viz[i])
	 for(j=1;j<=nrb[i];j++)
		 M*=divb[i];

}


int main()
{long i,bun;
long long x;

citire();

for(i=1;i<=A*B*10;i++)
 {
  x=(long long)M*i;
  bun=1;
  while(x)
	{
	 if((x%10)>1) {bun=0;break;}
	 x/=10;
	 }
  if(bun) break;
  }

freopen("multiplu.out","w",stdout);
printf("%lld",(long long)M*i);
fclose(stdout);


return 0;
}