Pagini recente » Profil scipianus | Cod sursa (job #153945) | Link-uri | Monitorul de evaluare | Cod sursa (job #201543)
Cod sursa(job #201543)
#include <stdio.h>
#include <algorithm>
#include <utility>
using namespace std;
#define NMAX 52
#define L2 75
#define L3 50
#define L5 40
int cd[L2*L3*L5][3];
int h[L2][L2][L2];
int a[NMAX][3];
int n,k,nk;
int pr[6];
long long p2[L2],p3[L3],p5[L5];
long long sol;
inline int sh(int x)
{
return x+32;
}
int main()
{
freopen("aliens.in","r",stdin);
freopen("aliens.out","w",stdout);
int i,j,x,y,z;
scanf("%d",&n);
fprintf(stderr,"x");
for (i=1;i<=n;i++)
{
scanf("%d %d",&x,&y);
memset(pr,0,sizeof(pr));
for (j=2;j*j<=x;j++)
for (;x%j==0;x/=j) pr[j]++;
if (x>1) pr[x]++;
for (j=2;j*j<=y;j++)
for (;y%j==0;y/=j) pr[j]--;
if (y>1) pr[y]--;
a[i][0]=pr[2];
a[i][1]=pr[3];
a[i][2]=pr[5];
}
p2[0]=p3[0]=p5[0]=1;
for ( i=1;p2[i-1]*2< (long long)1<<35;i++ ) p2[i]=p2[i-1]*2;
for ( i=1;p3[i-1]*3< (long long)1<<35;i++ ) p3[i]=p3[i-1]*3;
for ( i=1;p5[i-1]*5< (long long)1<<35;i++ ) p5[i]=p5[i-1]*5;
nk=k=0;
sol=0;
for (i=1;i<=n;i++)
{
k=nk;
for (j=0;j<=k;j++)
{
x=cd[j][0]+a[i][0];
y=cd[j][1]+a[i][1];
z=cd[j][2]+a[i][2];
if (h[ sh(x) ][ sh(y) ][ sh(z) ]) continue;
h[ sh(x) ][ sh(y) ][ sh(z) ]=1;
nk++;
cd[nk][0]=x;cd[nk][1]=y;cd[nk][2]=z;
if ( (x>=0)&&(y>=0)&&(z>=0) )
{
sol=max(sol, (long long) p2[x]*p3[y]*p5[z] );
}
}
}
printf("%lld",sol);
return 0;
}