Pagini recente » Cod sursa (job #2133268) | Cod sursa (job #858970) | Cod sursa (job #136435) | Cod sursa (job #389475) | Cod sursa (job #1722306)
#include <cstdio>
#include <algorithm>
#define MAX 6000000
#define INF 2000000005
using namespace std;
char f[MAX];
int pos=0,P,Q,Max=0;
struct fact
{
int prime,size;
}v[21];
bool X;
void r(int &nr)
{
nr=0;
while(f[pos]<'0'||f[pos]>'9')
pos++;
while(f[pos]>='0'&&f[pos]<='9')
nr=nr*10+f[pos++]-'0';
}
void rch(char &ch)
{
while(f[pos]<'a'||f[pos]>'z')
pos++;
ch=f[pos++];
}
bool solve (int val,int pos)
{
long long S=0,x=v[pos].prime;
while(x<=val)
{
S+=val/x;
x*=v[pos].prime;
}
if(S<v[pos].size)
return false;
else return true;
}
int binsearch(int ep)
{
long long lw=1,hi=v[ep].size,mid;
while(lw<=hi)
{
mid=(lw+hi)>>1;
X=solve(mid*v[ep].prime,ep);
if(X) hi=mid-1;
else lw=mid+1;
}
return lw*v[ep].prime;
}
int main()
{
freopen("gfact.in","r",stdin);
freopen("gfact.out","w",stdout);
fread(f,1,MAX,stdin);
r(P);r(Q);
int K=P,i=3;
if(K%2==0)
{
v[0].size++;
v[v[0].size].prime=2;
while(K%2==0)
{
v[v[0].size].size+=Q;
K/=2;
}
}
while(K>1)
{
if(i*i>K)
i=K;
if(K%i==0)
{
v[0].size++;
v[v[0].size].prime=i;
while(K%i==0)
{
v[v[0].size].size+=Q;
K/=i;
}
}
i+=2;
}
for(int i=1;i<=v[0].size;i++)
Max=max(Max,binsearch(i));
printf("%d",Max);
return 0;
}