Cod sursa(job #2924726)

Utilizator AnSeDraAndrei Sebastian Dragulescu AnSeDra Data 9 octombrie 2022 16:06:41
Problema GFact Scor 15
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.19 kb
#include <fstream>

using namespace std;

#define Nmax 44721

bool ciur[Nmax];

bool esteSolutie(int n, int p, int q)
{
    int cnt;

    cnt = 0;
    while(n / p > 0)
    {
        cnt += n / p;
        n /= p;
    }

    return cnt >= q;
}

int main()
{
    ifstream fin("gfact.in");
    ofstream fout("gfact.out");

    int p, q, i, j, divprimmax, l, r, mid, sol;

    fin >> p >> q;

    divprimmax = 1;

    for(i = 2; i <= Nmax && p > 1; i++)
    {
        if(ciur[i] == 0)
        {
            if(p % i == 0)
            {
                divprimmax = i;
                while(p % i == 0)
                {
                    p = p / i;
                }
            }

            for(j = i * i; j <= Nmax; j += i)
            {
                ciur[j] = 1;
            }
        }
    }

    if(p > 1)
    {
        divprimmax = p;
    }

    l = 1;
    r = Nmax;

    while(l <= r)
    {
        mid = (l + r) / 2;

        if(esteSolutie(mid, divprimmax, q))
        {
            sol = mid;
            r = mid - 1;
        }
        else
        {
            l = mid + 1;
        }
    }

    fout << sol;
    return 0;
}