Cod sursa(job #2854721)

Utilizator db_123Balaban David db_123 Data 21 februarie 2022 18:22:26
Problema Divizori Primi Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.32 kb
#include <fstream>
#include <vector>

using namespace std;

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

#define DIM 1e6

int n;
vector<pair<int,int>> v;
vector<int> ciur;
vector<vector<int>> ma(8);

void read(){
    cin>>n;
    v.resize(n+1);
    for(int i=1;i<=n;i++){
        cin>>v[i].first>>v[i].second;
    }
}

void buildMa(){
    for(int i=1;i<8;i++){
        ma[i].push_back(1);
    }
    ciur.resize(DIM);
    ciur[1]=0;
    for(int i=2;i<=DIM;i++){
        if(ciur[i]==0){
            for(int j=i;j<=DIM;j+=i){
                ciur[j]++;
            }
        }
        if(ciur[i]<=7){
            ma[ciur[i]].push_back(i);
        }
    }
}

void solve(){
    buildMa();
    // for(int i=1;i<=7;i++){
    //     cout<<i<<" : ";
    //     for(int j=1;j<ma[i].size();j++){
    //         cout<<ma[i][j]<<" ";
    //     }
    //     cout<<"\n";
    // }
    // return;
    for(int i=1;i<=n;i++){
        int l=1,r=ma[v[i].second].size()-1,mid=0,sol=0;
        while(l<=r){
            mid=l+(r-l)/2;
            if(ma[v[i].second][mid]<v[i].first){
                sol=ma[v[i].second][mid];
                l=mid+1;
            }
            else if(ma[v[i].second][mid]>=v[i].first){
                r=mid-1;
            }
        }
        cout<<sol<<"\n";
    }
}

int main(){
    
    read();
    solve();
    return 0;
}