Pagini recente » Cod sursa (job #2721337) | Cod sursa (job #1046164) | Cod sursa (job #3124658) | Cod sursa (job #1126513) | Cod sursa (job #524993)
Cod sursa(job #524993)
#include<stdio.h>
int factprimi[101],produs[101];
long long n,p,num,k=0;
void descompunere()
{
long long i;
for(i=2;i*i<=n;i++)
{
if(n%i==0)
{
factprimi[k++]=i;
while(n%i==0)
n/=i;
}
}
if(n!=1)
factprimi[k++]=n;
}
void PRODUS()
{
long long prod,nr,i,j;
for (i=0;i<(1<<k);i++)
{
prod=1;
nr=i;
for(j=0;nr>0;j++,nr/=2)
{
if (nr%2==1)
prod*=-factprimi[j];
}
produs[i]=prod;
}
}
long long functie(long long x)
{
long long nr=0,i;
for(i=0;i<(1<<k);i++)
nr+=x/produs[i];
return nr;
}
int main()
{
long long st=1,dr=1000000,m;
freopen("frac.in","r",stdin);
freopen("frac.out","w",stdout);
scanf("%lld%lld",&n,&p);
descompunere();
PRODUS();
while(st<=dr)
{
m=(st+dr)/2;
if(functie(m)>=p)
{
num=m;
dr=m-1;
}
else
st=m+1;
}
printf("%lld\n",num);
return 0;
}