Cod sursa(job #2433426)

Utilizator dr_personalityEftime Andrei Horatiu dr_personality Data 27 iunie 2019 13:11:22
Problema GFact Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.17 kb
#include <fstream>
#include<cmath>
using namespace std;
ifstream cin("gfact.in");
ofstream cout("gfact.out");
const int L=45;
int divizor[100],putere[100];
long long nd,p,q;
void descompunere(int n)
{
    int dv = 2;
    while (dv * dv <= n)
    {
        if (n % dv == 0)
        {
            divizor[nd] = dv;
            while (n % dv == 0)
            {
                putere[nd]++;
                n /= dv;
            }
            nd++;
        }
        dv++;
    }
    if (n > 1)
    {
        divizor[nd] = n;
        putere[nd++] = 1;
    }
}

long long nrp(long long n, int p)
{

    long long nr=0;
    while (n>=p)
    {
        nr+=n/p;
        n/=p;
    }
    return nr;
}
bool  df(long long n)
{
    for (int i=0; i<nd; i++)
    {
        if (nrp(n,divizor[i])<putere[i] * q)
        {
            return 0;
        }
    }
    return 1;
}
long long caut()
{
    long long r = 0, pas = 1LL<< L;
    while (pas != 0)
    {
        if (!df(r + pas))
        {
            r += pas;
        }
        pas /= 2;
    }
    return r+1;
}
int main()
{
    cin>>p>>q;
    descompunere(p);
    cout<<caut();
}