Cod sursa(job #2662382)

Utilizator 2016Teo@Balan 2016 Data 23 octombrie 2020 23:00:03
Problema GFact Scor 20
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.04 kb
#include <bits/stdc++.h>
using namespace std;
#define x1 "gfact.in"
#define x2 "gfact.out"
ifstream in(x1);
ofstream out(x2);
int v[11], f[11], c, q, p;
long long putere(long long n, int p1) {
    long long r = 0;
    while (n >= p1) {
        r += n / p;
        n /= p;
    }
    return r;
}

bool divfact(long long n) {
    for (int i = 0; i < c; i++) {
        if (putere(n, v[i]) < f[i] * q) {
            return 0;
        }
    }
    return 1;
}

long long cautb() {
    long long r = 0, pas = 1LL << 45;
    while (pas != 0) {
        if (!divfact(r + pas)) {
            r += pas;
        }
        pas /= 2;
    }
    r++;
    return r;
}

int main() {
    int i, j, a, d = 2;
    in >> p >> q;
    while(d * d <= p) {
        if(!p % d) {
            v[c] = d;
            while(!p / d) {
                f[c] ++;
                p /= d;
            }
            c++;
        }
        d++;
    }
    if(p > 1) {
        v[c] = p;
        f[c++] = 1;
    }
    out << cautb();
    return 0;
}