Pagini recente » Cod sursa (job #1017386) | Cod sursa (job #967559) | Cod sursa (job #359676) | Cod sursa (job #990190) | Cod sursa (job #423550)
Cod sursa(job #423550)
#include<stdio.h>
const char in[]="divprim.in", out[]="divprim.out";
const unsigned N = 1000050;
unsigned a[8][N], n, k, T, v[N];
void ciur()
{a[0][0] = a[0][1] = 1;
for(unsigned i = 2 ; i <= N ; ++i)
if(!v[i])
{
a[1][++a[1][0]] = i;
for( unsigned j = i + i ; j <= N ; j += i)
++v[j];
}
else a[ v[ i ] ][ ++a[ v[ i ] ][ 0 ] ] = i;
}
unsigned caut(unsigned tar, unsigned lin)
{
unsigned lo = 1, hi = tar, mid, sol = 0;
for( ; lo <= hi ; )
{
mid = lo + ( hi - lo ) / 2;
if( a[ lin ][ mid ] <= tar )
{
sol = a[ lin ][ mid ];
lo = mid + 1;
}
else if(a[ lin ][ mid ] > tar ) hi = mid - 1 ;
}
return sol;
}
int main()
{
freopen(in,"r",stdin);
freopen(out,"w",stdout);
scanf("%u", &T);
ciur();
for(; T-- ; )
{
scanf("%u%u", &n, &k);
printf("%u\n",caut(n, k));
}
return 0;
}