Pagini recente » Cod sursa (job #1098684) | Cod sursa (job #2131149) | Cod sursa (job #1972851) | Cod sursa (job #552195) | Cod sursa (job #1255458)
#include <stdio.h>
int d[ 11 ], ind = 0;
void descomp ( int n ){
int i;
for ( i = 2; i * i <= n; i++ ){
if ( n % i == 0 ){
d[ ind ] = i;
ind++;
}
while ( n % i == 0 ) n /= i;
}
if ( n > 1 ){
d[ ind ] = n;
ind++;
}
return ;
}
long long nrfr(long long x){
int i, ci, minus, p;
long long nr, rez = 0;
for(i = 1; i < (1 << ind); i++){
nr = 1;
minus = -1;
p = 0;
for(ci = i; ci > 0; ci >>= 1){
if(ci & 1){
nr *= d[p];
minus = -minus;
}
p++;
}
rez += minus * (x / nr);
}
return x - rez;
}
int caut ( int p ){
long long i = 0, pas = 1LL * (1 << 30) * (1 << 30) * 2;
while ( pas > 0 ){
if(nrfr(i + pas) < p) i += pas;
pas >>= 1;
}
return i + 1;
}
int main()
{
FILE *in = fopen( "frac.in", "r" );
long long n, p;
fscanf( in, "%lld%lld", &n, &p );
fclose( in );
FILE *out = fopen( "frac.out", "w" );
descomp( n );
fprintf( out, "%d", caut ( p ) );
fclose( out );
return 0;
}