Cod sursa(job #1701374)

Utilizator oldatlantianSerban Cercelescu oldatlantian Data 12 mai 2016 21:39:03
Problema Divizori Primi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.85 kb
#include <bits/stdc++.h>
using namespace std;

const int NMAX = 1000005;

int ans[8][NMAX],
         c[NMAX];

inline void erat(int lim) {
    int i, j, t;

    for(i=2; i<=lim; i+=2)
        ++c[i];
    for(i=3; i<=lim; i+=2) {
        if(c[i])
            continue;
        for(j=i; j<=lim; j+=i)
            ++c[j];
    }
    for(i=2; i<=lim; ++i)
        if(c[i]<=7)
            ans[c[i]][i]=i;
    for(i=1; i<=7; ++i)
        for(j=2; j<=lim; ++j)
            if(!ans[i][j])
                ans[i][j]=ans[i][j-1];
}

int main(void) {
    FILE *fi = fopen("divprim.in","r");
    FILE *fo = fopen("divprim.out","w");
    int t, n, k;

    erat(NMAX-5);

    fscanf(fi,"%d",&t);
    while(t--) {
        fscanf(fi,"%d%d",&n,&k);
        fprintf(fo,"%d\n",ans[k][n]);
    }

    fclose(fi);
    fclose(fo);
    return 0;
}