Cod sursa(job #2832687)

Utilizator NutaAlexandruASN49K NutaAlexandru Data 14 ianuarie 2022 09:50:30
Problema GFact Scor 25
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.28 kb
#include <iostream>
#include <vector>
#include <algorithm>
#include <fstream>
using namespace std;
const long long maxx=(1LL<<62);
ifstream fin("gfact.in");
ofstream fout("gfact.out");
long long maxd(long long a)
{
    long long div=3,rez=1;
    if(a%2==0)
    {
        rez=2;
        a/=2;
    }
    while(a%2==0)
    {
        a/=2;
    }
    while(div*div<=a && a!=1)
    {
        if(a%div==0)
        {
            a/=div;
            rez=div;
        }
        while(a%div==0)
        {
            a/=div;
        }
        a+=2;
    }
    if(a!=1)
    {
        return a;
    }
    return rez;
}
long long nrdiv(long long a,long long div)
{
    long long rez=0;
    while(a%div==0)
    {
        rez++;
        a/=div;
    }
    return rez;
}
long long rez(long long n,long long d)
{
    long long s=0,p=d;
    while(p<=n)
    {
        s+=(n/p);
        p*=d;
    }
    return s;
}
int main()
{
    long long a,b;
    fin>>a>>b;
    long long div=maxd(a),nr=nrdiv(a,div)*b,dr=maxx,st=1,ans=maxx;

    while(st<=dr)
    {
        long long m=((st+dr)>>1);
        if(rez(m,div)>=nr)
        {
            ans=m-(m%div);
            dr=m-1;
        }
        else
        {
            st=m+1;
        }
    }
    fout<<ans;
}