Pagini recente » Cod sursa (job #2093925) | Cod sursa (job #1846848) | Cod sursa (job #2253545) | Cod sursa (job #857750) | Cod sursa (job #1728135)
#include<cstdio>
#define MAXD 30
#define INF (1LL<<61)
using namespace std;
long long dividers=0;
long long value[MAXD];
long long Count(long long x){
long long limit=(1<<dividers),i,j,answer=x,add;
for(i=1;i<limit;i++){
add=1;
for(j=0;j<dividers;j++)
if((i&(1<<j)))
add*=-value[j];
answer+=x/add;
}
return answer;
}
int main(){
freopen("frac.in","r",stdin);
freopen("frac.out","w",stdout);
long long n,k,temp,i,left=1,right=INF,middle,answer;
scanf("%lld%lld",&n,&k);
temp=n;
for(i=2;i*i<=n;i++)
if(n%i==0){
value[dividers]=i;
dividers++;
while(n%i==0)
n/=i;
}
if(n!=1){
value[dividers]=n;
dividers++;
}
n=temp;
while(left<=right){
middle=(left+right)/2;
if(Count(middle)>=k){
answer=middle;
right=middle-1;
}
else
left=middle+1;
}
printf("%lld",answer);
return 0;
}