Cod sursa(job #1803692)

Utilizator herbertoHerbert Mohanu herberto Data 11 noiembrie 2016 18:07:55
Problema Divizori Primi Scor 75
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.75 kb
#include<stdio.h>
using namespace std;
#define MAXN 1000010

int v[8][MAXN], l[8], div[MAXN];
int main(){
  FILE*fin=fopen("divprim.in", "r");
  FILE*fout=fopen("divprim.out", "w");
  int d, p, q, i, j, n, k, rez, pas;
  v[0][1]=1;
  for ( d = 2; d * d < MAXN; d++ )
    if(div[d]== 0){
      div[d]=1;
      l[1]++; v[1][l[1]]=d;
      for(i=d*2; i<=MAXN; i+=d)
        div[i]++;
    }
  for(i=1; i<=MAXN; i++){
    l[div[i]]++;
    v[div[i]][l[div[i]]]=i;
  }
  printf("%d", v[2][1]);
  fscanf(fin, "%d", &q);
  for(p=1; p<=q; p++){
    fscanf(fin, "%d%d", &n, &k);
    rez=0;
    for(pas=1<<18; pas; pas>>=1)
      if(rez+pas<=l[k] && v[k][rez+pas]<=n){
        rez+=pas;
      }
    fprintf(fout, "%d\n", v[k][rez]);
  }
  return 0;
}