Cod sursa(job #2535247)

Utilizator dorufDoru Floare doruf Data 31 ianuarie 2020 18:11:19
Problema Divizori Primi Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.75 kb
#include <bits/stdc++.h>
using namespace std;

ifstream fin("divprim.in");
ofstream fout("divprim.out");

const int N = 1000005;
int dprim[N];
int q, n, k;

vector<int> v[10];

int Bs(int n, int k)
{
	int st = 0, dr = v[k].size() - 1, mij = 0, sol = -1;
	while (st <= dr)
	{
		mij = (st + dr) / 2;
		if (v[k][mij] <= n)
			sol = mij, st = mij + 1;
		else dr = mij - 1;
	}
	return (sol == -1 ? 0 : v[k][sol]);
}

int main()
{
	ios_base::sync_with_stdio(false);
	fin.tie(0);
	fout.tie(0);

	for (int i = 2; i < N; ++i)
		if (!dprim[i])
			for (int j = 1; i * j < N; ++j)
				++dprim[i * j];

	for (int i = 2; i < N; ++i)
		v[dprim[i]].push_back(i);

	fin >> q;
	while (q--)
	{
		fin >> n >> k;
		fout << Bs(n, k) << '\n';
	}
}