Cod sursa(job #1334752)

Utilizator ZenusTudor Costin Razvan Zenus Data 4 februarie 2015 16:58:00
Problema GFact Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1 kb
#include <cstdio>
#include <vector>

using namespace std;

long long left,right,mid,p,q,i,exp,c,f;
vector < pair < long long , long long > > t;

long long query(long long p,long long e)
{
    long long cu=e,to=0;

    while (cu<=p)
    {
        to+=p/cu;
        cu*=e;
    }

    return to;
}

bool check(long long step)
{
    long long i;

    for (i=0;i<t.size();++i)
    if (query(step,t[i].first)<t[i].second)
    return false;

    return true;
}

int main()
{
freopen("gfact.in","r",stdin);
freopen("gfact.out","w",stdout);

scanf("%lld%lld",&p,&q);

for (i=2,c=p;i*i<=p;++i)
{
    exp=0;

    while (c%i==0)
    {
        c/=i;
        ++exp;
    }

    if (exp) t.push_back(make_pair(i,q*exp));
}

if (c>1) t.push_back(make_pair(c,q));

left=1;right=1000000000000000000;

while (left<=right)
{
    mid=(left+right)>>1;

    if (check(mid))
    {
        f=mid;
        right=mid-1;
    } else left=mid+1;
}

printf("%lld\n",f);

return 0;
}