当前位置:首页 C++ > 正文

C++筛法求素数,惟一分解定理。

作者:野牛程序员:2023-06-19 16:56:04 C++阅读 2613

C++中的筛法求素数是一种常见且高效的算法,它可以用于找到一定范围内的所有素数。下面是一个示例代码,演示了如何使用筛法求素数:

#include <iostream>
#include <vector>

using namespace std;

vector<int> sieveOfEratosthenes(int n) {
    vector<bool> isPrime(n+1, true);
    vector<int> primes;

    for (int p = 2; p * p <= n; p++) {
        if (isPrime[p]) {
            for (int i = p * p; i <= n; i += p) {
                isPrime[i] = false;
            }
        }
    }

    for (int p = 2; p <= n; p++) {
        if (isPrime[p]) {
            primes.push_back(p);
        }
    }

    return primes;
}

int main() {
    int n;
    cout << "Enter the upper limit: ";
    cin >> n;

    vector<int> primes = sieveOfEratosthenes(n);

    cout << "Prime numbers up to " << n << " are: ";
    for (int prime : primes) {
        cout << prime << " ";
    }

    return 0;
}

在这个示例中,sieveOfEratosthenes函数接收一个整数n作为参数,并返回一个包含所有小于等于n的素数的向量。它使用布尔数组isPrime来标记每个数字是否为素数。最初,假设所有数字都是素数,然后通过遍历从2到√n的每个数字p,将其倍数标记为非素数。最后,遍历数组,将所有标记为素数的数字添加到结果向量primes中。


关于唯一分解定理(Unique Factorization Theorem),它表明每个正整数可以唯一地表示为素数的乘积。换句话说,每个合数都可以通过将素数因子相乘来表示,而且这个表示是唯一的(除了因子的顺序)。这个定理在数论和代数中都有广泛的应用。

野牛程序员教少儿编程与信息学奥赛-微信|电话:15892516892
野牛程序员教少儿编程与信息学竞赛-微信|电话:15892516892
相关推荐

最新推荐

热门点击