Pagini recente » Cod sursa (job #514966) | Istoria paginii runda/ada29/clasament | Monitorul de evaluare | Cod sursa (job #2011879) | Cod sursa (job #235931)
Cod sursa(job #235931)
#include <stdio.h>
struct test
{
int n,k;
} t[100001];
int a[1000001];
int v[7][379720];
int max,q;
void cautbin (int val,int ln)
{
int in,sf,mj;
in=1;
sf=v[ln][0];
while (in<=sf)
{
mj=in+(sf-in)/2;
if (v[ln][mj]<=val && v[ln][mj+1]>val)
{
printf ("%d\n",v[ln][mj]);
return ;
}
if (v[ln][mj]<val)
in=mj+1;
else
sf=mj-1;
}
printf ("%d\n",v[ln][mj]);
}
int main ()
{
freopen ("divprim.in","r",stdin);
freopen ("divprim.out","w",stdout);
int i,j;
scanf ("%d",&q);
for (i=1; i<=q; ++i)
{
scanf ("%d%d",&t[i].n,&t[i].k);
if (t[i].n>max)
max=t[i].n;
}
for (i=2; i<=max; ++i)
if (!a[i])
for (j=i; j<=max; j+=i)
++a[j];
for (i=0; i<=7; ++i)
for (j=2; j<=max; ++j)
if (a[j]==i+1)
v[i][++v[i][0]]=j;
for (i=1; i<=q; ++i)
{
if (t[i].k==0)
printf ("1\n");
else
{
if (t[i].n<v[t[i].k-1][1])
printf ("0\n");
else
cautbin (t[i].n,t[i].k-1);
}
}
return 0;
}