Cod sursa(job #2987568)

Utilizator raresmihociMihoci Rares raresmihoci Data 2 martie 2023 15:04:12
Problema Divizori Primi Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.08 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("divprim.in");
ofstream fout("divprim.out");

const int KMAX = 7, NMAX = 1000000;

int ciur[NMAX+1];
int mat[KMAX+1][NMAX+1];
int s[NMAX+1];
int t, n, k, nmax;

int caut(int a[], int st, int dr, int x)
{
    int mij;
    while(st < dr)
    {
        mij = (st + dr) / 2;
        if(a[mij] <= x)
        {
            st = mij + 1;
        }
        else
        {
            dr = mij;
        }
    }
    mij = (st + dr) / 2;

    if(a[mij] > x)mij--;
    return a[mij];
}

int main()
{
    ciur[1] = 1;
    for(int i = 2; i <= NMAX; i++)
    {
        if(ciur[i] == 0)
        {
            for(int j = i; j <= NMAX; j += i)
            {
                ciur[j]++;
            }
        }
    }

    for(int i = 2; i <= NMAX; i++)
    {
        if(ciur[i] <= KMAX)
        {
            mat[ciur[i]][++s[ciur[i]]] = i;
        }
    }

    fin >> t;
    for(int i = 1; i <= t; i++)
    {
        fin >> n >> k;
        fout << caut(mat[k], 1, s[k], n) << '\n';
    }

}