Cod sursa(job #1450211)

Utilizator SwagginInMyJaysaaaaaaaaaaaas SwagginInMyJays Data 11 iunie 2015 22:04:19
Problema GFact Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.06 kb
#include <fstream>
#define goprox unsigned long long
#define limd 32

using namespace std;

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

struct factor{
    goprox up, Div;
};

goprox a, b, d, NM;
factor dp[limd];

bool ok (goprox mid){
    for (int k = 1; k <= (int)NM; k++){
            goprox aux = dp[k].Div, Ress = 0;
            while (mid / aux > 0LL)
                Ress += mid / aux, aux *= dp[k].Div;
            if (Ress < dp[k].up)
               return 0;
    }
    return 1;
}

int main(){
    in >> a >> b;
    for (d = 2 ; d * d <= a; ++ d ) {
            if (a % d)
               continue;
            int per = 0;
            while (a % d == 0) ++ per, a /= d;
                dp[++NM].up = per * b, dp[NM].Div = d;
    }
    if (a > 1)
       dp[++ NM].up = b, dp[NM].Div = a;
    goprox st = 1 , dr = (1LL * 1 << 60), godd;
    while (st <= dr){
            goprox mid = (st + dr) >> 1;
            if (ok(mid)) godd = mid, dr = mid - 1;
            else st = mid + 1;
    }
    out << godd;
    return 0;
}