输出100~1000间最大的十个素数?编程c++

如题所述

#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;
}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2015-04-28
从1000循环到100,设这个数为i,用i-1到2循环去求模(%),如果碰到一个无余数就不是素数,否则输出,素数个数n增一,n够10个就停止。自己实践一下吧,很容易的题。本回答被网友采纳
相似回答