Pagini recente » Cod sursa (job #523624) | Cod sursa (job #2853020) | Cod sursa (job #342466) | Cod sursa (job #2324439) | Cod sursa (job #2186900)
#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;
}