Cod sursa(job #1328638)

Utilizator tac1234Tran Bach Nguyen tac1234 Data 28 ianuarie 2015 16:57:23
Problema Divizori Primi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.13 kb
#include <cstdio>
using namespace std;
bool c[1000005];
int prime[80000],u;
short int sol[1000005];
int m[1000005][8];
void ciur()
{
    c[0]=c[1]=1;
    for(register int i=4; i<=1000000; i+=2)
        c[i]=1;
    for(register int i=3; i<=1000; i+=2)
        if (!c[i])
            for(register int j=i*i; j<=1000000; j+=(i<<1))
                c[j]=1;
    prime[1]=2;
    u=1;
    for(register int i=3; i<=1000000; i+=2)
        if (!c[i])
            prime[++u]=i;
}
void ciuradevarat()
{
    for(register int i=1; i<=u; ++i)
        for(register int j=prime[i]; j<=1000000; j+=prime[i])
            ++sol[j];
}
int main()
{
    freopen("divprim.in","r",stdin);
    freopen("divprim.out","w",stdout);
    int t,n,i,j;
    short int k;
    bool ok;
    scanf("%d",&t);
    ciur();
    ciuradevarat();
    for(i=1; i<=1000000; ++i)
        for(j=1; j<=7; ++j)
        {
            if (sol[i]==j)
                m[i][j]=i;
            else
                m[i][j]=m[i-1][j];
        }
    while(t)
    {
        scanf("%d%hd",&n,&k);
        printf("%d\n",m[n][k]);
        --t;
    }
    return 0;
}