Pagini recente » Cod sursa (job #1852717) | Cod sursa (job #583692) | Cod sursa (job #637678) | Cod sursa (job #2730737) | Cod sursa (job #2278099)
#include <fstream>
using namespace std;
long long dp[20];
long long x=0;
long long n,p;
long long verif(long long mij)
{
int sum=0;
for(int i=1;i<=x;i++)
{
sum=sum+mij/dp[i];
for(int j=i+1;j<=x;j++)
{
sum=sum-mij/(dp[i]*dp[j]);
}
}
return mij-sum;
}
int main()
{ ifstream cin("frac.in");
ofstream cout("frac.out");
cin>>n>>p;
if(n==1)
{
cout<<p;
return 0;
}
for(int i=2;i*i<=n;i++)
{
if(n%i==0)
{
dp[++x]=i;
}
while(n%i==0)
n/=i;
}
if(n>1)
{
dp[++x]=n;
}
long long st=1,dr=1,mij;
for(int i=1;i<=61;i++)
dr=dr*2;
long long boi;
while(st<=dr)
{
mij=(st+dr)/2;
long long t=verif(mij);
if(t==p)
{
boi=mij;
break;
}
if(t>p)
{
dr=mij-1;
}
else
st=mij+1;
}
for(int i=boi;i>=1;i--)
{
long long t=verif(i);
if(t!=p)
break;
else
boi=i;
}
cout<<boi;
return 0;
}