Cod sursa(job #1636499)

Utilizator cristina_borzaCristina Borza cristina_borza Data 7 martie 2016 10:23:44
Problema GFact Scor 45
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.25 kb
#include <fstream>

#define INF 1500000000
#define NMAX 50

using namespace std;

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

unsigned int v[NMAX] , nr[NMAX];
unsigned int p , q , n;

void desc(unsigned int x);

unsigned int verif(unsigned int x);
unsigned int caut_bin();

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

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


void desc(unsigned int x) {
    unsigned int 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;
    }
}

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

        i >>= 1;
    }

    return p + 1;
}


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

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

    return 1;
}