C++筛法求素数,惟一分解定理。
作者:野牛程序员:2023-06-19 16:56:04 C++阅读 3123
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

- 上一篇:c++大整数除法
- 下一篇:C++欧几里得算法和扩展欧几里得算法
