Pagini recente » Cod sursa (job #477179) | Cod sursa (job #697801) | Cod sursa (job #668073) | Cod sursa (job #379685) | Cod sursa (job #198149)
Cod sursa(job #198149)
#include <stdio.h>
#include <string.h>
#define NMAX 1000
long long n,k,nr,v[NMAX],vec[NMAX],i,m,q,stanga,dreapta,numar;
long long ver(long long x)
{
long long suma=0,produs=1,t=0;
memset(vec,0,sizeof(vec));
while (vec[0]==0)
{
for (i=numar;i>=0;--i)
if (vec[i]==0)
{
vec[i]=1;
break;
}
else vec[i]=0;
for (i=numar;i>=0;--i)
if (vec[i]==0)
{
produs*=vec[i];
t=!t;
}
if (produs==1) break;
if (t==0)
suma-=x/produs;
else
suma+=x/produs;
}
return suma;
}
long long cautare(long long a,long long b)
{
m=(a+b)/2;
if (ver(m)>k)
return cautare(a,m);
else
return cautare(m+1,b);
}
void citire()
{
freopen("frac.in","rt",stdin);
freopen("frac.out","wt",stdout);
scanf("%lld %lld", &n, &k);
}
void descompunere()
{
for (i=2;i*i<=n;i++)
if (n%i==0)
{
v[++nr]=i;
while (n%i==0) n/=i;
}
if (n!=0) v[++nr]=n;
}
void solve()
{
citire();
descompunere();
stanga=0;
dreapta=1000000000*10000000000;
q=cautare(stanga,dreapta);
printf("%lld",q);
}
int main()
{
solve();
return 0;
}