Pagini recente » Cod sursa (job #1615985) | Cod sursa (job #262869) | Cod sursa (job #2802648) | Cod sursa (job #203070) | Cod sursa (job #1141650)
#include <fstream>
using namespace std;
ifstream fin ("frac.in");
ofstream fout ("frac.out");
long long n,p,i,j,k,st,dr,mid,rez,r,prod;
long long v[100010];
bool f[110000];
long long pinex (long long a) {
rez=0;
for (i=1;i<n;i++) {
r=0;prod=1;
for (j=1;j<=k;j++)
if(i&(1LL<<(j-1))){
r++;
prod*=v[j];
}
if (r%2==0)
rez+=a/prod;
else
rez-=a/prod;
}
return (a+rez);
}
int main () {
fin>>n>>p;
for (i=2;i*i<=n;i++) {
if (f[i]==0) {
if (n%i==0){
v[++k]=i;
while (n%i==0)
n/=i;
}
for (j=i+i;j*j<=n;j+=i)
f[j]=1;
}
}
if (n!=1)
v[++k]=n;
n=(1LL<<k);
st=1;dr=(1LL<<61);
while (st<=dr) {
mid=st+(dr-st)/2;
if (pinex (mid)>=p)
dr=mid-1;
else
st=mid+1;
}
fout<<st<<"\n";
return 0;
}