Pagini recente » Borderou de evaluare (job #1034276) | Borderou de evaluare (job #2308049) | Borderou de evaluare (job #1385478) | Borderou de evaluare (job #1878393) | Cod sursa (job #2501208)
#include <fstream>
#include <iostream>
using namespace std;
ifstream f("aliens.in");
ofstream g("aliens.out");
long long n, sol;
pair <long long, long long> v[55];
struct date
{ long long p2, p3, p5;
};
long long lgput(long long a, long long n)
{ long long P = 1;
for(int i=1; i<=n; i++) P = P * a;
return P;
}
int main()
{
f >> n;
for(int i=1; i<=n; i++) f >> v[i].first >> v[i].second;
for(long long mask=1; mask<(1<<n); mask++)
{ date numi, numa;
numi.p2 = numi.p3 = numi.p5 = numa.p2 = numa.p3 = numa.p5 = 0;
for(int i=0; i<n; i++)
if(mask & (1 << i))
{ long long a = v[i+1].first, b = v[i+1].second;
//cout << a << ' ' << b << '\n';
while(a % 2 == 0) numa.p2++, a /= 2;
while(a % 3 == 0) numa.p3++, a /= 3;
while(a % 5 == 0) numa.p5++, a /= 5;
while(b % 2 == 0) numi.p2++, b /= 2;
while(b % 3 == 0) numi.p3++, b /= 3;
while(b % 5 == 0) numi.p5++, b /= 5;
}
if(numa.p2 >= numi.p2 && numa.p3 >= numi.p3 && numa.p5 >= numi.p5)
{ long long put2 = numa.p2 - numi.p2, put3 = numa.p3 - numi.p3, put5 = numa.p5 - numi.p5;
long long nr1 = 2, nr2 = 3, nr3 = 5;
long long nr = lgput(nr1, put2) * lgput(nr2, put3) * lgput(nr3, put5);
sol = max(sol, nr);
}
}
g << sol << '\n';
return 0;
}