Cod sursa(job #805404)

Utilizator cocoshilaClaudiu cocoshila Data 31 octombrie 2012 13:17:26
Problema GFact Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.97 kb
#include <stdio.h>
int p,q,d,putere[24],div[24];

bool divide(long long n)
{
    int i,j;
    long long pow,s;

    for(i=1;i<=d;i++)
    {
        s=0;
        pow=1;
        while(pow <= n)
        {
            pow *= div[i];
            s += n/pow;
        }
        if(s < putere[i]*q) return false;
    }
    return true;
}

void descomp(int n)
{
    int i;
    for(i=2 ; i*i<=n ; i++)
    {
        if(n%i!=0) continue;
        div[++d] = i;
        while(n%i == 0)
        {
            putere[d]++;
            n /= i;
        }
    }
    if(n != 1)
    {
        div[++d] = n;
        putere[d] = 1;
    }
}


long long caut()
{
    long long i,pas = 1LL << 60;
    for(i=0 ; pas!=0 ; pas >>= 1)
        if(!divide(i+pas))
            i += pas;
    return i+1;
}

int main()
{
    freopen("gfact.in","r",stdin);
    freopen("gfact.out","r",stdout);
    scanf("%d%d",&p,&q);
    descomp(p);
    printf("%d",caut());

}