Cod sursa(job #3277855)

Utilizator Mihai_OctMihai Octavian Mihai_Oct Data 17 februarie 2025 15:50:02
Problema Divizori Primi Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.94 kb
#include <bits/stdc++.h>

using namespace std;

ifstream fin("divprim.in");
ofstream fout("divprim.out");
const int Max = 1000000;
int t, n, k, i, j, divi[Max + 2];
vector<int> pr[8];

static inline void Ciur() {
    pr[0].push_back(1);
    for(int i = 2; i <= Max; i++) {
        if(divi[i] == 0) {
            for(int j = i; j <= Max; j += i) divi[j]++;
        }

        pr[divi[i]].push_back(i);
    }
}

static inline void Calc() {
    fin >> n >> k;

    if(pr[k].front() > n) fout << "0\n";
    else {
        int st = 0, dr = pr[k].size() - 1;
        int poz = st;

        while(st <= dr) {
            int mij = st + (dr - st) / 2;

            if(pr[k][mij] <= n) {
                poz = mij;
                st = mij + 1;
            }
            else dr = mij - 1;
        }

        fout << pr[k][poz] << "\n";
    }
}

int main() {
    Ciur();
    fin >> t;
    while(t--) Calc();

    return 0;
}