Cod sursa(job #354158)

Utilizator dushmiMihai-Alexandru Dusmanu dushmi Data 7 octombrie 2009 11:30:52
Problema GFact Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.02 kb
#include<cstdio>
const long long MAXIM=(long long)1<<60;
long long p,q,n,a[1001],b[1001];

void dfp(long long m)
{
    for(long long i=2;i*i<=m;i++)
    {
        if(m%i==0)
        {
            ++n;
            a[n]=i;
        }
        while(m%i==0)
        {
            ++b[n];
            m/=i;
        }
    }
    if(m!=1)
    {
        ++n;
        a[n]=m;
        b[n]=1;
    }
}
bool ver(long long x, long long y, long long z)
{
    long long nrfac=0;
    while(x)
    {
        nrfac+=x/y;
        x/=y;
    }
    if(nrfac>=z)
        return true;
    return false;
}
bool ok(long long x)
{
    for(long long i=1;i<=n;i++)
        if(ver(x,a[i],b[i]*q)==false)
            return false;
    return true;
}
int main()
{
    freopen("gfact.in","r",stdin);
    freopen("gfact.out","w",stdout);
    long long i,pas;
    scanf("%lld%lld",&p,&q);
    dfp(p);
    pas=MAXIM;
    for(i=1;pas;pas>>=1)
        if(!ok(i+pas))
            i+=pas;
    printf("%lld ",i+1);
    return 0;
}