Pagini recente » Cod sursa (job #2382871) | Cod sursa (job #387580) | Cod sursa (job #596906) | Cod sursa (job #2854645) | Cod sursa (job #2987568)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("divprim.in");
ofstream fout("divprim.out");
const int KMAX = 7, NMAX = 1000000;
int ciur[NMAX+1];
int mat[KMAX+1][NMAX+1];
int s[NMAX+1];
int t, n, k, nmax;
int caut(int a[], int st, int dr, int x)
{
int mij;
while(st < dr)
{
mij = (st + dr) / 2;
if(a[mij] <= x)
{
st = mij + 1;
}
else
{
dr = mij;
}
}
mij = (st + dr) / 2;
if(a[mij] > x)mij--;
return a[mij];
}
int main()
{
ciur[1] = 1;
for(int i = 2; i <= NMAX; i++)
{
if(ciur[i] == 0)
{
for(int j = i; j <= NMAX; j += i)
{
ciur[j]++;
}
}
}
for(int i = 2; i <= NMAX; i++)
{
if(ciur[i] <= KMAX)
{
mat[ciur[i]][++s[ciur[i]]] = i;
}
}
fin >> t;
for(int i = 1; i <= t; i++)
{
fin >> n >> k;
fout << caut(mat[k], 1, s[k], n) << '\n';
}
}