Cod sursa(job #1251258)

Utilizator lauratalaatlaura talaat lauratalaat Data 29 octombrie 2014 09:57:51
Problema GFact Scor 95
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.1 kb
#include<stdio.h>
long long fact[30001],putere[30001],k,s,q,p;

long long puterea( long long n, long long p)
{
    long long s=0;
    while(p <= n)
    {
        s += n/p;
        n = n/p;
    }
    return s;
}

bool verif ( long long x)
{
    long long i,cate=0;
    for(i=1; i<=k; i++)
    {
        s = puterea(x, fact[i]);
        if(q*putere[i]>s)
            return false;
    }
    return true;
}

long long cautbin ()
{
    long long i=0,pas=1LL<<40LL;
    while(pas!=0)
    {
        if(!verif(i+pas))
            i+=pas;
        pas>>=1;
    }
    return 1 + i;
}

int main()
{
    long long i,r,pu;
    freopen("gfact.in","r",stdin);
    freopen("gfact.out","w",stdout);
    scanf("%lld%lld",&p,&q);
    i=2;
    while(i*i<=p)
    {
        if(p%i==0)
        {
            pu=0;
            while(p%i==0)
            {
                p=p/i;
                pu++;
            }
            k++;
            fact[k]=i;
            putere[k]=pu;
        }
        i++;
    }
    if(p!=1)
    {
        k++;
        fact[k]=p;
        putere[k]=1;
    }
    r=cautbin();
    printf("%lld\n",r);
    return 0;

}