Cod sursa(job #2670426)

Utilizator andreibazavanAndrei Bazavan andreibazavan Data 9 noiembrie 2020 21:08:25
Problema GFact Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.14 kb
#include<bits/stdc++.h>

using namespace std;
ifstream fin("gfact.in");
ofstream fout("gfact.out");
unsigned long long p,k,q,b,st,dr,nr,r,prim,m;
int main()
{
    fin>>p>>q;
    for(int i=2;i*i<=p;i++)
	{ r=0;
        while(p%i==0)r++,p/=i;
        if(r!=0)
		{
            r=r*q;
            dr=1;st=2*r*i;
            while(dr<=st)
			{
                m=(dr+st)/2;
                nr=0;prim=i;
                while(m/prim)
                {
                    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>1)
	{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';
return 0;
}