Cod sursa(job #2670426)
Utilizator | 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;
}