Cod sursa(job #2088104)

Utilizator vladsftVlad Safta vladsft Data 14 decembrie 2017 19:26:37
Problema GFact Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.97 kb
#include <fstream>

using namespace std;

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

int dp[80000], e[80000];
long long p, r;
int ndp, q;

long long putere(long long n, int x)
{
    long long nr = 0;
    while (n >= x)
    {
        nr += n/x;
        n /= x;
    }
    return nr;
}

bool sedivide(long long n){
    for (int i = 1; i <= ndp; i++)
        if (putere(n, dp[i]) < e[i] * q)
            return false;
    return true;
}

int main()
{
    f >> p >> q;
    long long n = p, pas = 1LL << 45;
    int d = 2;
    while (d * d <= n)
    {
        if (n % d == 0)
        {
            dp[++ndp] = d;
            p = 0;
            while (n%d == 0)
            {
                n /= d;
                p++;
            }
            e[ndp] = p;
        }
        d++;
    }
    if (n != 1){
        dp[++ndp] = n;
        e[ndp] = 1;
    }
    while (pas != 0)
    {
        if (!sedivide(r + pas))
            r += pas;
        pas /= 2;
    }
    r++;
    g << r;
    return 0;
}