Pagini recente » Diferente pentru home intre reviziile 234 si 235 | Cod sursa (job #1606640) | Cod sursa (job #523079) | Cod sursa (job #127988) | Cod sursa (job #2854206)
#include <fstream>
#include <vector>
using namespace std;
ifstream cin("divprim.in");
ofstream cout("divprim.out");
const int DIM=1000000;
int v[DIM+1];
vector<vector<int>> ma(8,vector<int>(0)); /// 7 prime factors !!!
int t,n,k;
int main()
{
int left,right,mid,sol,j;
for(int i=0 ; i < 8;i++)
ma[i].push_back(1); /// counter of numbers
v[1]=0;
for(int i=2; i<=DIM; i++)
{
if(v[i]==0) /// v[i] is prime
{
for(int j=i; j<=DIM; j+=i)
{
v[j]++; /// mark multiples as how many prime factors have
}
}
if(v[i]<=7)
ma[v[i]].push_back(i);
}
cin >>t;
for(int i=1; i<=t; i++)
{
cin >>n>>k;
left = 1;
right = ma[k].size()-1; /// how many numbers having k prime factors
sol=0;
while(left<=right)
{
mid = (left+ right)/2;
if(ma[k][mid]==n)
{
sol = ma[k][mid];
break;
}
else if(ma[k][mid]<n)
{
sol = ma[k][mid];
left = mid+1;
}
else
right = mid -1;
}
cout <<sol<<'\n';
}
return 0;
}