Cod sursa(job #2778162)

Utilizator ililogIlinca ililog Data 29 septembrie 2021 16:50:20
Problema Divizori Primi Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.38 kb
#include <bits/stdc++.h>
using namespace std;
 
ifstream fin("divprim.in");
ofstream fout("divprim.out");
 
int t,n,k;
int ciur[1000001];
pair<int,int> a[1000001];
 
void fa_ciur() {
 
    for (int i = 2; i<=10; i++) {
        if (ciur[i] == 0) {
            ciur[i] = 1;
            for (int j = i*2; j<=10; j+=i) {
                ciur[j]++;
               // cout << j << endl;
            }
        }
    }
 
  //  for (int i = 1; i<=10; i++) {
  //      cout << ciur[i] << " ";
 //   }
}
 
int cautbin(int x) {
 
    int st = 1;
    int dr = n;
    int poz = 0;
 
    while (st <= dr) {
        int mid = (st+dr)/2;
        if (a[mid].first < x) {
            st = mid+1;
        } else if (a[mid].first > x) {
            dr = mid-1;
        } else {
            poz = mid;
            st = mid+1;
        }
    }
 
    return poz;
}
 
 
void rezolvare(int n, int k) {
 
    for (int i = 1; i<=n; i++) {
        a[i].first = ciur[i];
        a[i].second = i;
    }
 
    sort(a+1, a+n+1);
 
  //  for (int i = 1; i<=n; i++) {
   //     cout << a[i].first << " " << a[i].second << endl;
    //}
 
   // cout << cautbin(k) << endl;
 
    fout << a[cautbin(k)].second << endl;
}
 
int main() {
 
    fa_ciur();
 
    fin >> t;
 
    for (int i = 1; i<=t; i++) {
        fin >> n >> k;
        rezolvare(n,k);
    }
 
    return 0;
}