Cod sursa(job #1655840)

Utilizator theodor.moroianuTheodor Moroianu theodor.moroianu Data 18 martie 2016 13:31:15
Problema GFact Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.95 kb
#include <fstream>
using namespace std;

long long f(int prm, int put);

long long maxim(long long x, long long y);

int main()
{
    long long nr = 0;
    int a, p;
    ifstream in("gfact.in");
    in >> a >> p;
    for (int i = 2; i * i <= a; i++) {
        if ( a % i == 0 ) {
            int l = 0;
            while (a % i == 0) {
                a /= i;
                l++;
            }
            l *= p;
            nr = maxim(nr, f(i, l));
        }
    }
    if (a != 1) {
        nr = maxim(nr, f(a, p));
    }
    ofstream out("gfact.out");
    out << nr;
    return 0;
}

long long maxim(long long x, long long y) {
    if (x > y)
        return x;
    return y;
}


long long f(int prm, int put) {
    long long p = 0, q = (1ll << 60);
    while (q > 0) {
        long long r = 0, a = (p + q) / prm;
        while (a > 0) {
            r += a;
            a /= prm;
        }
        if (r < put)
            p += q;
        q /= 2;
    }
    return p + 1;
}