Cod sursa(job #2356604)

Utilizator MoldovanAndrei1Moldovan Andrei MoldovanAndrei1 Data 26 februarie 2019 20:10:11
Problema GFact Scor 90
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.28 kb
#include <bits/stdc++.h>
using namespace std;
int main()
{
    freopen("gfact.in","r",stdin);
    freopen("gfact.out","w",stdout);
    long long st=1,dr=15000000,p,q;
    scanf("%lld%lld",&p,&q);
    long long d=2,e=0;
    long long m1=0;
    while(d*d<=p)
    {
        st=1,dr=1LL<<50;
        e=0;
        while(p%d==0)
        {
            p/=d;
            e++;
        }
        if(e==0)
        {
            d++;
            continue;
        }
        long long q1=q*e;
    while(st<=dr)
    {
        long long med=(st+dr)/2;
        long long x=0,p1=1,pl=med;
        while(pl)
        {
            x+=pl/d;
            pl/=d;
        }
        if(x>q1)dr=med-1;
        if(x==q1)
        {
            m1=max(m1,med/d*d);
            break;
        }
        if(x<q1)st=med+1;
    }
    d++;

    }
    if(p>1){d=p;
st=1;
dr=1LL<<50;
            long long q1=q*1;
    while(st<=dr)
    {
        long long med=(st+dr)/2;
        long long x=0,p1=1,pl=med;
        while(pl)
        {
            x+=pl/d;
            pl/=d;
        }
        if(x>q1)dr=med-1;
        if(x==q1)
        {
            m1=max(m1,med/d*d);
            break;
        }
        if(x<q1)st=med+1;
    }
    }
    printf("%lld\n",m1);
    return 0;
}