Cod sursa(job #2794803)

Utilizator db_123Balaban David db_123 Data 5 noiembrie 2021 14:39:12
Problema Divizori Primi Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.14 kb
#include <fstream>


using namespace std;

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

const int DIM=1000000;

int m[8][DIM+1];
int v[DIM+1];
bool ciur[DIM+1];
int cnt[8];
int main()
{
    int n,t,k,i,j;
    v[2]=1;
    i=4;
    while(i<=DIM)
    {
        v[i]++;
        ciur[i]=1;
        i+=2;
    }
    for(i=3;i<DIM;i+=2)
    {
        if(ciur[i]==0)
        {
            v[i]++;
            ciur[i]=1;
            j=2*i;
            while(j<=DIM)
            {
                v[j]++;
                ciur[j]=1;
                j+=i;
            }
        }
    }
    for(i=1;i<=7;i++)
    {
        k=1;
        for(j=2;j<=DIM;j++)
        {
            if(v[j]==i)
                m[i][k++]=j;
        }
        cnt[i]=k-1;
    }

    int nr,d;
    int step,p;
    cin >> t;
    for(i=1;i<=t;i++)
    {
        cin >> nr >> d;

        step=1<<19;
        p=0;
        while(step>0)
        {
            if(step+p<=cnt[d])
                if(m[d][step+p]<=nr)
                p+=step;
            step/=2;
        }
        cout << m[d][p]<< '\n';
    }

    return 0;
}