Pagini recente » Cod sursa (job #2372255) | Cod sursa (job #2239629) | Cod sursa (job #2852003) | minune5 | Cod sursa (job #3301879)
#include <bits/stdc++.h>
#define MAXP 11
using namespace std;
int p[MAXP + 1] , len;
long long check( long long nr ) {
int i , j , bits;
long long ans , prod;
ans = 0;
for( i = 1 ; i < ( 1 << len ) ; i++ ) {
prod = 1;
bits = 0;
for( j = 0 ; ( 1 << j ) <= i ; j++ )
if( i & ( 1 << j ) ) {
bits++;
prod *= p[j];
}
if( bits % 2 == 1 )
ans += nr / prod;
else if( bits > 0 )
ans -= nr / prod;
if( nr == 10 )
cout << i << ' ' << bits << ' ' << prod << '\n';
}
return nr - ans;
}
int main() {
ifstream cin( "frac.in" );
ofstream cout( "frac.out" );
int d , e;
long long n , st , dr , mij , limit;
cin >> n >> limit;
d = 2;
len = 0;
while( d * d <= n ) {
e = 0;
while( n % d == 0 ) {
n /= d;
e++;
}
if( e )
p[len++] = d;
d++;
}
if( n > 1 )
p[len++] = n;
st = 0;
dr = ( 1LL << 61 ) + 1;
while( dr - st > 1 ) {
mij = ( st + dr ) / 2;
if( check( mij ) >= limit )
dr = mij;
else
st = mij;
}
cout << dr << '\n';
return 0;
}