Pagini recente » Cod sursa (job #2978402) | Cod sursa (job #1209362) | Cod sursa (job #2687581) | Cod sursa (job #1753873) | Cod sursa (job #327624)
Cod sursa(job #327624)
using namespace std;
#include<stdio.h>
const int P=1<<31-1;
int fact[20][2], nrp=0,p,q;
void des(int n)
{
int i,j;
for(i=2,j=1;i*i<=n;++i)
{
while(!(n%i))
{
n=n/i;
fact[j][1]++;
}
if(fact[j][1])
fact[j++][0]=i;
}
if(n!=1)
{
fact[j][0]=n;
fact[j++][1]=1;
}
nrp=j-1;
//printf("am desc\n");
}
bool zero( int f)
{
int s=0,x=f, min=1000000000,i;
/*
while(x)
{
x=x/fact[1][0];
s+=x;
}
min=s/fact[1][1];
*/
for(i=1;i<=nrp;++i)
{
x=f;s=0;
while(x)
{
x=x/fact[i][0];
s+=x;
}
//printf("n=%d fact=%d, s=%d\n",f,fact[i][0],s);
if(s<q*fact[i][1])
return false;
}
return true;
}
long long caut()
{
int st=1,dr=P;
long long m;
while(st!=dr)
{
m=(st+dr)/2;
//printf("zero(%d)=%d\n",m,zero(m));
if(!zero(m))
st=m+1;
else
dr=m;
//printf("%d\n",m);
}
return st;
}
int main()
{
freopen("gfact.in","r", stdin);
scanf("%d%d", &p,&q);
des(p);
//printf("nrp=%d, p=%d ^%d\n",nrp,fact[1][0],fact[1][1]);
freopen("gfact.out","w", stdout);
printf("%d", caut());
return 0;
}