Cod sursa(job #1500537)

Utilizator hasmasandragosHasmasan Dragos hasmasandragos Data 12 octombrie 2015 09:31:06
Problema GFact Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.96 kb
#include <bits/stdc++.h>

using namespace std;
ifstream in("gfact.in");
ofstream out("gfact.out");

long long nz(long long n,long long c)
{
    long long p=c,sol=0;
    while(p<=n)
    {
        sol+=(n/p);
        p*=c;
    }
    return sol;
}

long long bs(long long fact, long long put)
{
    long long s=1;
    long long d=(1<<30);
    d*=d;
    long long k,mij;
    while(s<=d)
    {
        mij=(s+d)/2;
        k=nz(mij,fact);
        if(k>=put)
        {
            d=mij-1;
        }
        else
        {
            s=mij+1;
        }

    }
    mij=(s+d)/2;
    k=nz(mij,fact);
    if(k<put)
    {
        mij++;
    }
    return mij;
}

int main()
{long long p,q,i,nr;
in>>p>>q;
long long cp=p,d=2,mx=0;
while(d*d<=cp)
{
    nr=0;
    while(cp%d==0)
    {
        nr++;
        cp/=d;
    }
    if(nr)
    mx=max(mx,bs(d,nr*q));

    d++;
}
if(cp!=1)
mx=max(mx,bs(cp,q));
    out<<mx;
    return 0;
}