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
- 上一篇:c++大整数除法
- 下一篇:C++欧几里得算法和扩展欧几里得算法