Cod sursa(job #1328601)

Utilizator tac1234Tran Bach Nguyen tac1234 Data 28 ianuarie 2015 16:28:05
Problema Divizori Primi Scor 55
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.08 kb
#include <cstdio>
using namespace std;
bool c[1000005];
int prime[80000],u;
short int sol[1000005];
void ciur()
{
    int i,j;
    c[0]=c[1]=1;
    for(i=4; i<=1000000; i+=2)
        c[i]=1;
    for(i=3; i<=1000; i+=2)
        if (!c[i])
            for(j=i*i; j<=1000000; j+=(i<<1))
                c[j]=1;
    prime[1]=2;
    u=1;
    for(i=3; i<=1000000; i+=2)
        if (!c[i])
            prime[++u]=i;
}
void ciuradevarat()
{
    int i,j;
    for(i=1; i<=u; ++i)
        for(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,k;
    bool ok;
    scanf("%d",&t);
    ciur();
    ciuradevarat();
    while(t)
    {
        scanf("%d%d",&n,&k);
        ok=0;
        while(n)
        {
            if (sol[n]==k)
            {
                ok=1;
                break;
            }
            --n;
        }
        if (ok==1)
            printf("%d\n",n);
        else
            printf("0\n");
        --t;
    }
    return 0;
}