Cod sursa(job #1537179)

Utilizator mariakKapros Maria mariak Data 26 noiembrie 2015 23:42:01
Problema GFact Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.01 kb
#include <bits/stdc++.h>

using namespace std;
int p, q, F, Fq;
int gpf(int x)
{
    int d = 2, io = 0;
    do
    {
        if (x % d == 0)
            io = d;
        while (x % d == 0)
            x /= d;

        if (d * d < 0 && d * d >= x)
            return max(io, x);
        d ++;
    }
    while(x != 1);
    return io;
}
long long nf(long long x)
{
    long long s = 0LL;
    while(x)
    {
        x /= F;
        s += x;
    }
    return s;
}
long long bs(long long fq)
{
    long long i = 0, p = 1LL;
    for (i = 1; i <= 35; ++ i)
        p *= 2;
    i = 0;
    while(p)
    {
        if(nf(i + p) < fq)
            i += p;
        p /= 2;
    }
    return i;
}
int main()
{
    freopen("gfact.in ", "r", stdin);
    freopen("gfact.out", "w", stdout);
    scanf("%d %d", &p, &q);
    F = gpf(p);
    int io = p;
    while (io % F == 0)
    {
        ++ Fq;
        io /= F;
    }

    long long k = bs(q * Fq);
    printf("%lld\n", k + 1);
    return 0;
}