Cod sursa(job #2186900)

Utilizator CristyXtremeSimion Cristian CristyXtreme Data 26 martie 2018 02:00:32
Problema Divizori Primi Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.29 kb
#include <cstdio>
#include <vector>
#include <algorithm>

using namespace std;

const int m=1000001;

FILE *f=fopen("divprim.in","r"),*g=fopen("divprim.out","w");
int divizori[m];
vector <int> di[8];

int main()
{
    for(int i=2;i<m;i++)
        if(divizori[i]==0)
        {
            divizori[i]++;     //numerele prime au 1 factor prim si se creste numarul de divizori ai multiplilor lor
            for(int j=i+i;j<m;j+=i)
                divizori[j]++;
        }
    for(int i=0;i<m;i++)
    {
        di[divizori[i]].push_back(i);
    }
    int n,M,k,l,mid,r,sol;
    fscanf(f,"%i",&n);
    for(int i=0;i<n;i++)
    {
        fscanf(f,"%i %i",&M,&k);
        /*l=0;
        r=di[k].size()-1;
        sol=0;
        while(l<=r)
        {
            mid=l+(r-l)/2;
            if(div[k][mid]<=M)
            {
                l=mid+1;
                sol=div[k][mid];
            }
            else
                r=mid-1;
        }
        fprintf(g,"%i\n",sol);*/
        if(di[k][lower_bound(di[k].begin(),di[k].end(),M)-di[k].begin()]==M)
            fprintf(g,"%i\n",di[k][lower_bound(di[k].begin(),di[k].end(),M)-di[k].begin()]);
        else
            fprintf(g,"%i\n",di[k][lower_bound(di[k].begin(),di[k].end(),M)-di[k].begin()-1]);
    }
    return 0;
}