Cod sursa(job #2014661)

Utilizator flibiaVisanu Cristian flibia Data 24 august 2017 11:57:48
Problema Divizori Primi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.66 kb
#include <bits/stdc++.h>

using namespace std;

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

int n, k, t, st, dr, mid, v[1000100];
vector <int> s[8];

void bs(int n, int k){
	st = 0; dr = s[k].size() - 1;
	if(n < s[k][st]){
		out << "0\n";
		return;
	}
	while(st <= dr){
		mid = (st + dr) / 2;
		if(s[k][mid] <= n) st = mid + 1;
		else dr = mid - 1;
	}
	out << s[k][dr] << '\n';
}

int main(){
	in >> t;
	for(int i = 2; i <= 1000000; i++)
		if(!v[i])
			for(int j = i; j <= 1000000; j += i) v[j]++;
	for(int i = 1; i <= 1000000; i++)
		if(v[i] <= 7) s[v[i]].push_back(i); 
	while(t--){
		in >> n >> k;
		bs(n, k);
	}	
	return 0;
}