Pagini recente » Cod sursa (job #127729) | Cod sursa (job #2360178) | Cod sursa (job #1960114) | Cod sursa (job #334989) | Cod sursa (job #2221344)
#include<cstdio>
#define MAX_N 1000000
#define MAX_LEN 380000
#define MAX_K 7
using namespace std;
int a[MAX_K+1][MAX_LEN+1];
int nrdiv[MAX_N+1], len[MAX_K+1], n, T;
void ciur(int n) {
nrdiv[1] = 0;
a[1][len[1]++] = 1;
for(int i = 2; i <= n; i++) {
if(nrdiv[i] == 0)
for(int j = i; j <= n; j += i)
nrdiv[j]++;
a[nrdiv[i]][len[nrdiv[i]]++] = i;
}
}
int binarySearch(int k, int x) {
int b, e, mid, pos;
b = 0; e = len[k]; pos = -1;
while(b <= e) {
mid = (b + e) >> 1;
if(a[k][mid] <= x) {
pos = mid;
b = mid + 1;
} else e = mid - 1;
}
return pos;
}
int main() {
int i, x, y, poz;
FILE* fin, *fout;
fin = fopen("divprim.in","r");
fout = fopen("divprim.out","w");
fscanf(fin,"%d",&T);
ciur(MAX_N);
for(i = 1; i <= T; i++) {
fscanf(fin,"%d%d",&x,&y);
poz = binarySearch(y,x);
if(poz != -1)
fprintf(fout,"%d\n",a[y][poz]);
else fprintf(fout,"0\n");
}
fclose(fin);
fclose(fout);
return 0;
}