Pagini recente » Cod sursa (job #2789488) | Cod sursa (job #1535704) | Cod sursa (job #1139792) | Cod sursa (job #170419) | Cod sursa (job #194062)
Cod sursa(job #194062)
#include<stdio.h>
#define N 1000000
unsigned long long n,P,sol,prod,n2,e;
unsigned long long p[N], v[N];
void back(unsigned long long prod, unsigned long long count, unsigned long long where, unsigned long long pos, unsigned long long x){
unsigned long long i;
if(count>0){
if(count%2)
e+=x-x/prod;
else
e-=x-x/prod;
}
for(i=pos;i<=p[0];++i){
v[where]=p[i];
back(prod*p[i],count+1,where+1,i+1,x);
v[where]=0;
}
}
unsigned long long nr(unsigned long long x){
e=0;
back(1,0,1,1,x);
return e;
}
void solve(){
unsigned long long i,x,l,r,m;
for(n2=n,i=2;n2>1;++i)
for(;n2%i==0;n2/=i)
if(i!=p[p[0]])
p[++p[0]]=i;
for(x=2;nr(x)<P;x<<=1);
for(l=1,r=x;l<=r;){
m=(l+r)>>1;
x=nr(m);
if(x>=P){
r=m-1;
sol=m;
}
else{
l=m+1;
}
}
}
int main(){
freopen("frac.in","r",stdin);
freopen("frac.out","w",stdout);
scanf("%llu%llu",&n,&P);
solve();
printf("%llu\n",sol);
return 0;
}