Pagini recente » Cod sursa (job #105007) | Cod sursa (job #1766912) | Cod sursa (job #11270) | Cod sursa (job #2062942) | Cod sursa (job #2794911)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin ("gfact.in");
ofstream fout ("gfact.out");
int p,q;
long long m;
long long pow(long long a,long b)
{
long long g=b,c=0;
while (g<=a)
{c=c+a/g;
g*=b;}
return c;
}
struct div
{
int d,e;
}v[12];
int main()
{
fin >>p>>q;
if (p==1) fout <<1;
else {int i=2,k=0;
while (i*i<=p)
{while (p%i==0)
{v[k+1].e++;
p=p/i;}
if (v[k+1].e>0) {k++;v[k].d=i;}
i++;}
if (p>1) {k++;v[k].d=p;v[k].e=1;}
for (i=1;i<=k;i++)
{long long x=v[i].d,y=q*v[i].e;
long long left=1,right=60000000000000,sol=0;
while (left<=right)
{long long mid=(left+right)/2;
if (pow(mid,x)>=y) {sol=mid;
right=mid-1;}
else {left=mid+1;}}
if (sol>m) m=sol;}
fout <<m;}
return 0;
}