Cod sursa(job #2795601)

Utilizator Cyf0Spineanu Rares Cyf0 Data 6 noiembrie 2021 17:47:58
Problema GFact Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.66 kb
#include <iostream>
#include <fstream>
using namespace std;
int main()
{
    ifstream fin("gfact.in");
    ofstream fout("gfact.out");
    unsigned long long P, Q, k, b=0, r, st, dr, nr, prim, m;
    fin >> P >> Q;
    for (int i = 2; i * i <= P; i++)
    {
        r = 0;
        while (P % i == 0)
        {
            r++; 
            P /= i;
        }
        if (r != 0)
        {
            r*=Q;
            dr = 1; st = 2 * r * i;
            while (dr <= st)
            {
                m = (dr + st) / 2;
                nr = 0; 
                prim = i;
                while (m / prim>0)
                {
                    nr += (m / prim);
                    prim *= i;
                }
                if (nr == r)
                {
                    while (m % i) m--;
                    break;
                }
                else if (nr > r)
                    st = m - 1;
                else 
                    dr = m + 1;
            }
            if (m > b)
                b = m;
        }
    }
    if (P >= 2)
    {
        k = P; r = Q;
        dr = 1; 
        st = 2 * r * k;
        while (dr <= st)
        {
            m = (dr + st) / 2;
            nr = 0; 
            prim = k;
            while (m / prim)
            {
                nr += (m / prim);
                prim *= k;
            }
            if (nr == r)
            {
                while (m % k != 0) m--;
                break;
            }
            else if (nr > r)
                st = m - 1;
            else dr = m + 1;
        }
        if (m > b)
            b = m;
    }
    fout << b << '\n';
}