Pagini recente » Cod sursa (job #986832) | Cod sursa (job #2908723) | Cod sursa (job #765241) | Cod sursa (job #851711) | Cod sursa (job #265262)
Cod sursa(job #265262)
#include <stdio.h>
long long n, p, s, d, l, r, m, f, sol;
long i, nr, j, nrb;
long long dp[20];
int main()
{
freopen("frac.in", "r", stdin);
freopen("frac.out", "w", stdout);
scanf("%lld%lld", &n, &p);
// p--;
nr=0;
d=1;
while(n>1 && d*d<=n)
{
d++;
if(n % d == 0)
{
nr++;
dp[nr]=d;
while(n % d == 0)
{
n/=d;
}
}
}
if(n>1)
{
nr++;
dp[nr]=n;
}
l=0;
r=1LL * (long long)(1<<30) * (long long)(1<<30) * 2;
while(l+1<r)
{
m=(l+r)/2;
s=m;
for(i=1; i<(1<<nr); i++)
{
nrb=0;
f=1;
for(j=0; j<nr; j++)
{
if(i & (1<<j) )
{
nrb++;
f*=dp[j+1];
}
}
if(nrb % 2==0)
{
s+= (m / f);
}
else
{
s-= (m / f);
}
}
if(s==p)
{
sol=m;
}
if(s>=p)
{
r=m;
}
else
{
l=m;
}
}
printf("%lld\n", sol);
return 0;
}