Cod sursa(job #2798026)

Utilizator vladutzu_finutzuVlad Cacenschi vladutzu_finutzu Data 10 noiembrie 2021 20:31:34
Problema GFact Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.93 kb

#include <fstream>
using namespace std;
ifstream f("gfact.in");
ofstream g("gfact.out");
int p, q;
long long x=1;
long long howMany(long long b, long long p)
{
long long putere = p;
long long cnt=0;

while(putere <= b)
    cnt += b/putere, putere*=p;

return cnt;
}

long long getSol(long long baza, long long puterea)
{
long long l=1, r = 6 * x, mid, sol=0;

while(l <= r)
{
    mid = (l+r)/2;
    long long cnt = howMany(mid, baza);
    if(cnt < puterea)
        l = mid+1;
    else if(cnt >= puterea)
        sol = mid, r=mid-1;
}
return sol;
}

int main() {
f>>p>>q;

for(int i=1; i<=13; i++)
    x*=10;

long long exp=0;
long long sol=0;
while(p%2==0)
    p/=2, exp++;

sol = max(sol, getSol(2, exp*q));

for(long long i=3; i*i <= p; i+=2)
    if(p%i == 0)
    {
        exp=0;
        while(p%i==0)
            p/=i, exp++;
        sol = max(sol, getSol(i, exp*q));
    }

if(p != 1)
    sol = max(sol, getSol(p, q));

g<<sol<<'\n';

return 0;
}