Pagini recente » Cod sursa (job #2518874) | Cod sursa (job #994793) | Cod sursa (job #122835) | Cod sursa (job #3124307) | Cod sursa (job #198155)
Cod sursa(job #198155)
#include <stdio.h>
#include <string.h>
#define NMAX 20
long long n,k,nr,v[NMAX],vec[NMAX],i,m,q,stanga,dreapta1,numar,dreapta2;
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>=1;--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 x-suma;
}
long long cautare(long long a,long long b)
{
if (a==b) return a;
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;
dreapta1=1000000000;
dreapta2=1000000000;
printf("%lld",cautare(stanga,dreapta1*dreapta2));
}
int main()
{
solve();
return 0;
}