Cod sursa(job #2101854)

Utilizator NToniBoSSNicolae Tonitza NToniBoSS Data 8 ianuarie 2018 00:23:33
Problema GFact Scor 95
Compilator c Status done
Runda Arhiva de probleme Marime 0.93 kb
#include <stdio.h>
#include <stdlib.h>
#define LL long long
int b[21],e[21],nr;
int legendre(int i,LL f)
{
    LL pi=b[i],z=0;
    while(pi<=f)
    {
        z+=(f/pi);
        pi*=b[i];
    }
    return z>=e[i];
}
int verif(LL f)
{
    int fl=1;
    for(int i=1; i<=nr && fl; i++)
        fl=legendre(i,f);
    return fl;
}
int main()
{
    int p,q,div;
    LL pas,rez;
    freopen("gfact.in","r",stdin);
    freopen("gfact.out","w",stdout);
    scanf("%d%d",&p,&q);
    div=2;
    while(div*div<=p)
    {
        if(!(p%div))
        {
            nr++;
            while(!(p%div))
                p/=div,e[nr]++;
            b[nr]=div;
            e[nr]*=q;
        }
        div++;
    }
    if(p-1)
        e[++nr]=q,b[nr]=p;
    pas=((LL)1<<40);
    rez=0;
    while(pas)
    {
        if(!verif(rez+pas))
            rez+=pas;
        pas/=2;
    }
    printf("%lld\n",rez+1);

    return 0;
}