Cod sursa(job #598217)

Utilizator deneoAdrian Craciun deneo Data 24 iunie 2011 20:52:43
Problema GFact Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.86 kb
#include <fstream>
using namespace std;

int p, q;
int fp[50], pt[50], l = 0;

void getFact()
{   int i;
    for(i = 2; i * i <= p; ++i)
        if(p % i == 0)
        {   fp[++l] = i;
            while(p % i == 0){ p /= i; ++pt[l]; }
            pt[l] *= q;
        }
    if(p != 1)
    {   fp[++l] = p;
        pt[l] = q;
    }
}

bool ok(long long b)
{   long long i, nr, s;
    for(i = 1; i <= l; ++i)
    {   nr = 0; s = b;
        while(s)
        {   nr += s / fp[i];
            s /= fp[i];
        }
        if(nr < pt[i]) return 0;
    }
    return 1;
}

long long cauta()
{   long long i, rez = (long long)1 << 60;
    for(i = (long long)1 << 60; i; i >>= 1)
        if(ok(rez - i)) rez -= i;
    return rez;
}

int main()
{   ifstream f("gfact.in");
    ofstream g("gfact.out");
    f >> p >> q;

    getFact();

    g << cauta() << '\n';
    g.close();
    return 0;
}