1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#include <iostream>
#include <vector>
#include <bitset>

const std::size_t MAX = 60000000;

int main() {
    std::ios_base::sync_with_stdio(false);

    std::size_t k, n;
    std::cin >> k >> n;

    if (n >= MAX) {
        std::cout << "za dużo :(";
        return 1;
    }

    std::vector<unsigned> p;
    p.reserve(k);
    for (std::size_t i = 0; i < k; ++i) {
        unsigned p_i;
        std::cin >> p_i;
        p.push_back(p_i);
    }

    std::bitset<MAX> is_ok;
    is_ok.set(1);

    for (auto p_i: p) {
        for (size_t i = 1; i <= n / p_i; ++i) {
            if (is_ok[i]) {
                is_ok.set(p_i * i);
            }
        }
    }

    for (size_t i = n; ; --i) {
        if (is_ok[i]) {
            std::cout << i << "\n";
            return 0;
        }
    }
}