Cod sursa(job #1860813)

Utilizator caesar2001Stoica Alexandru caesar2001 Data 28 ianuarie 2017 13:27:58
Problema GFact Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.95 kb
#include <cstdio>

using namespace std;

FILE *in,*out;

const int L = 30;
const int n = 2000000000;

int exp(int x,long long  baza)
{
    long long  rez = 0;
    while(x > 0)
    {
        rez += x/baza;
        x /= baza;
    }
    return rez;
}

long long cauta(int x,long long baza)
{
    long long pas = 1<<L,r = 0;
    while(pas > 0)
    {
        if(r + pas < n && exp(r + pas,baza) < x)
            r += pas;
        pas /= 2;
    }
    return r+1;
}

int main()
{
    in = fopen("gfact.in","r");
    out = fopen("gfact.out","w");
    int p,q;
    fscanf(in,"%d %d",&p,&q);
    int cp;
    long long r = 0,d = 2;
    cp = p;
    while(d * d <= cp)
    {
        int putere = 0;
        while(cp % d == 0)
        {
            putere ++;
            cp /= d;
        }
        r = cauta(putere*q,d);
        d++;
    }
    if(cp > 1)
        r = cauta(q,cp);
       fprintf(out,"%lld",r);

    return 0;
}