Cod sursa(job #2082711)

Utilizator Cioarec_GeorgeCioarec George Cioarec_George Data 6 decembrie 2017 18:42:29
Problema GFact Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.99 kb
#include <iostream>
#include <fstream>

using namespace std;

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

int d[15], nr, p, q, v[20];

int z(int n)
{
    int nr=0;
    while(n>=5)
        nr+=(n/=5); //nr+=n/5; n/=5;
    return nr;
}

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

void div(int p)
{
    int a=2;
    nr=0;
    while(a*a<=p)
    {
        if(p%a==0)
        {
            d[nr]=a;
            while(p%a==0)
            {
                v[nr]++;
                p/=a;
            }
            nr++;
        }
        a++;
    }
    if(p>1)
    {
        d[nr]=p;
        v[nr]=1;
        nr++;
    }
}

bool sedv(long long n)
{
    for(int i=0; i<nr; i++)
        if(pu(n, d[i])<v[i]*q)
            return false;
    return true;
}

int main()
{
    long long r=0, pas=1ll<<45;
    in>>p>>q;
    div(p);
    while(pas!=0)
    {
        if(!sedv(r+pas))
            r+=pas;
        pas/=2;
    }
    r++;
    out<<r;
    return 0;
}