Cod sursa(job #1961204)

Utilizator usureluflorianUsurelu Florian-Robert usureluflorian Data 10 aprilie 2017 22:46:04
Problema Divizori Primi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.12 kb
#include <cstdio>
#include <string>
#define MAX 1000000
using namespace std;
int d[8][MAX+1],v[MAX+1],n,k,t; //d de i de j - cel mai mare elemenet cu i divizori primi mai mic sau egal decat j
void usu()
{
    for(int i=2;i<=MAX;++i) //ciur modificat astfel incat contorizam pt fiecare cati divizori primi are
    {
        if(!v[i])
        {
            for(int j=i+i;j<=MAX;j=j+i) ++v[j];
            v[i]=1;
        }
    }
}
void precalculare()
{
    for(int i=1;i<=7;++i) //maxim 7 divizori primi, ne spune in enunt
    {
        for(int j=1;j<=MAX;++j)
        {
            if(v[j]==i) d[i][j]=j; //daca elementul are i div primi --- avem elementul maximal cu i divizori pana la j
            else d[i][j]=d[i][j-1]; //daca nu descoperim alt element cu i divizori, il consideram cel mai mare pe cel mai mare mai mic decat j
        }
    }
}
int main()
{
    freopen("divprim.in","r",stdin);
    freopen("divprim.out","w",stdout);
    usu();
    scanf("%d",&t);
    precalculare();
    for(int i=1;i<=t;++i)
    {
        scanf("%d%d",&n,&k);
        printf("%d\n",d[k][n]);
    }
    return 0;
}