题解 | #判断一个数是不是质数#

判断一个数是不是质数

https://www.nowcoder.com/practice/b8bb5e7703da4a83ac7754c0f3d45a82

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

bool is_prime(int n) {
    static vector<int> primes{2, 3, 5};
    if (n < 1)
        return false;
    if (n > primes.back()) {
        for (int i = primes.back() + 2; i <= n; i++) {
            bool is_prime = std::all_of(primes.begin(), primes.end(), [&](auto k) {
                return i % k != 0;
            });
            if (is_prime) {
            primes.push_back(i);
            }
        }
    }
    return std::find(primes.begin(), primes.end(), n) != primes.end(); // primes contain n
}


int main() {

    // write your code here......
    int n;
    cin >> n;
    cout << (is_prime(n) ? "是质数" : "不是质数");

    return 0;
}

使用 vector 进行缓存,如果遇到之前没遇到的质数,就依次 +2 往下查

如果数字特别特别大,那么这个方法不太行,需要使用预先计算某个范围内所有质数的策略。

全部评论

相关推荐

03-24 17:57
门头沟学院 Java
yakuso:你这头像哈哈哈
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务