Cod sursa(job #1636477)

Utilizator cristina_borzaCristina Borza cristina_borza Data 7 martie 2016 10:16:17
Problema GFact Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.21 kb
#include <fstream>

#define INF 5000000000
#define NMAX 50

using namespace std;

ifstream f("gfact.in");
ofstream g("gfact.out");

long long v[NMAX] , nr[NMAX];
long long p , q , n;

void desc(long long x);

long long verif(long long x);
long long caut_bin();

int main() {
    f >> p >> q;

    desc(p);
    g << caut_bin();
    return 0;
}


void desc(long long x) {
    long long d = 2;
    while(x != 1 && d < x) {
        if(x % d == 0) {
            v[++n] = d;
            while(x % d == 0) {
                ++nr[n];
                x /= d;
            }

            nr[n] *= q;
        }

        ++d;
    }

    if(x != 1) {
        v[++n] = x;
        nr[n] = q;
    }
}

long long caut_bin() {
    long long i , p = 0;
    for(i = 1 ; i <= INF ; i <<= 1);
    while(i) {
        if(verif(i + p) == 0) {
            p += i;
        }

        i >>= 1;
    }

    return p + 1;
}


long long verif(long long x) {
    for(int i = 1 ; i <= n ; ++i) {
        long long p = v[i] , aux = 0;
        while(p <= x) {
            aux += x / p;
            p *= v[i];
        }

        if(aux < nr[i]) {
            return 0;
        }
    }

    return 1;
}