Cod sursa(job #2068055)
Utilizator | Data | 17 noiembrie 2017 09:43:24 | |
---|---|---|---|
Problema | Divizori Primi | Scor | 40 |
Compilator | cpp | Status | done |
Runda | Arhiva de probleme | Marime | 1.02 kb |
#include <bits/stdc++.h>
using namespace std;
ifstream fin("divprim.in");
ofstream fout("divprim.out");
int t, n, k;
int nrd[1000002], mat[1000002][8], vf[8];
void ciur()
{
int i, j;
for(i=2; i<=1000000; i+=2)
nrd[i]++;
for(i=2; i<=1000000; i++)
if(!nrd[i])
for(j=i; j<=1000000; j+=i)
{
nrd[j]++;
}
else
{
if(nrd[i]<=7)
mat[++vf[nrd[i]]][nrd[i]]=i;
}
}
int main()
{
int i, j;
bool ok;
ciur();
fin>>t;
for(i=1; i<=t; i++)
{
ok=0;
fin>>n>>k;
if(k==0)
{
fout<<1<<'\n';
ok=1;
}
else
{
for(j=vf[k]; j>=1; j--)
if(mat[j][k]<=n)
{
fout<<mat[j][k]<<'\n';
ok=1;
break;
}
}
if(!ok)
fout<<0<<'\n';
}
return 0;
}