Pagini recente » Cod sursa (job #1177371) | Cod sursa (job #2319071) | Cod sursa (job #34112) | Cod sursa (job #2479588) | Cod sursa (job #2701217)
#include <fstream>
using namespace std;
ifstream fin ("frac.in");
ofstream fout("frac.out");
long long v[100], n, nr, k, p, d, i, total, sol, nr2, st, dr, mid, x, j;
long long poz( long long a )
{
total=0;
for ( k=1; k < (1<<(nr+1)); k++ ){
nr2 = 0; sol =1;
for ( j=0; j < nr; j++ )
if ( (k >> j) & 1 )
sol *= v[j+1], nr2++;
if ( nr2%2 ) total += a/sol;
else total -= a/sol;
}
return (a-total)/2;
}
int main()
{
fin>>n>>p;
d=2;
while ( n > 1 ){
if ( n%d == 0 )
v[++nr] = d;
while ( n%d == 0 ) n/=d;
d++;
if ( d*d > n && n > 1 ) d=n;
}
st=1;
dr=(1LL<<61);
while ( st <= dr ){
mid = st + (dr-st)/2;
x = poz (mid);
if ( x >= p ) dr = mid-1;
else st = mid+1;
}
fout<<st;
return 0;
}