Cod sursa(job #1792030)

Utilizator dcutitoiuCutitoiu Adrian-Nicolae dcutitoiu Data 29 octombrie 2016 23:04:33
Problema Divizori Primi Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.15 kb
#include <iostream>
#include <algorithm>
#include <fstream>
#include <vector>
#include <string>
#include <iterator>
#include <numeric>
#include <string>
#include <set>
#include <map>
#include <queue>

using namespace std;

ifstream in("divprim.in");
ofstream out("divprim.out");

int main()
{
    vector<int> divisors(1000001);
    for(int i = 2; i <= 1000000; ++i)
    {
        if(divisors[i] == 0)
            for(int j = i + i; j <= 1000000; j += i)
                divisors[j]++;
    }

    vector<vector<int>> numbers(8, vector<int>());

    for(int i = 0; i <= 1000000; ++i)
    {
        numbers[divisors[i]].push_back(i);
    }

    int testNumber;
    cin >> testNumber;

    while(testNumber--)
    {
        int N, K;
        cin >> N >> K;
        auto found = lower_bound(numbers[K].begin(), numbers[K].end(), N);
        if(found == numbers[K].begin())
            if(*found != N)
                cout << 0;
            else
                cout << N;
        else if(found != numbers[K].end())
            cout << *(found - 1);
        else
            cout << 0;
        cout << '\n';
    }

    return 0;
}