#include <iostream>
#include <vector>
#include <numeric>
#include <algorithm>
#include <iterator>
typedef int int_t;
typedef std::vector<int_t> vector_t;
vector_t get_primes(int_t const min_, int_t const max_, vector_t::size_type n) {
vector_t v(max_ - 1), primes;
std::iota(v.begin(), v.end(), 2);// v = {2, ..., max}
for (vector_t::size_type i = 0; i < v.size(); ++i) {
if (v[i] != 0) {
if (v[i] >= min_) {
primes.push_back(v[i]);// v[i]没有被之前的数整除,是素数
}
for (vector_t::size_type j = i + 2; j < v.size(); ++j) {
if (v[j] % v[i] == 0) {// v[j]被v[i]整除,不是素数
v[j] = 0;
}
}
}
}
// 去掉多余的素数,保留最大的n个
// 注意:区间[min, max]中的素数可能不足n个
primes.erase(primes.begin(), primes.begin() + (primes.size() - std::min(n, primes.size())));
return primes;
}
int main() {
int_t min, max;
vector_t::size_type n;
std::cout << "输入区间:";
std::cin >> min >> max;
std::cout << "输入素数个数:";
std::cin >> n;
vector_t primes = get_primes(min, max, n);
std::copy(primes.begin(), primes.end(), std::ostream_iterator<int_t>(std::cout, " "));
return 0;
}