Cod sursa(job #194108)

Utilizator savimSerban Andrei Stan savim Data 8 iunie 2008 14:00:33
Problema Divizori Primi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.14 kb
#include <stdio.h>
#define maxl 1000000

int i,j,k,n,t,gas,p,q,r;
int prim[maxl+10],prec[maxl+10];
int nr[80000];
int div[10][maxl],ind[10];

int main()
{
    freopen("divprim.in","r",stdin);
    freopen("divprim.out","w",stdout);
    
    for (i=2; i<=maxl; i++)
        if (prim[i]==0)
        {
           nr[++k]=i;
           for (j=i; j<=maxl; j+=i)
               prim[j]=1;
        }
    
    for (i=1; i<=k; i++)
        for (j=nr[i]; j<=maxl; j+=nr[i])
            prec[j]++;

    for (i=0; i<=7; i++)
    {
        for (j=1; j<=maxl; j++)
            if (prec[j]==i)
            {
               ind[i]++;
               div[i][ind[i]]=j;
            }
    }
            
    scanf("%d",&t);
    while (t>0)
    {
        t--;gas=0;
        scanf("%d %d",&n,&k);
        
        p=0;q=ind[k]+1;
        while (p+1<q)
        {
            r=(p+q)/2;
            if (div[k][r]>n) q=r;
            else if (div[k][r]<=n)
                 {
                    gas=div[k][r];
                    p=r;                
                 }
        }
        printf("%d\n",gas);
    }
    
    return 0;    
}