用c++语言设计一个函数,输入数字n后,输出n以内的素数
时间: 2024-09-10 13:29:22 浏览: 107
在C++中设计一个函数来输出小于或等于给定数字n的所有素数,我们可以使用经典的素数筛选算法,例如埃拉托斯特尼筛法(Sieve of Eratosthenes)。以下是一个简单的函数实现示例:
```cpp
#include <iostream>
#include <vector>
// 函数声明,用于输出小于等于n的所有素数
void printPrimes(int n);
int main() {
int n;
std::cout << "请输入一个数字n: ";
std::cin >> n;
printPrimes(n);
return 0;
}
// 函数定义,用于输出小于等于n的所有素数
void printPrimes(int n) {
std::vector<bool> prime(n+1, true); // 初始化一个布尔数组,用于标记素数
prime[0] = prime[1] = false; // 0和1不是素数
for(int p = 2; p*p <= n; ++p) {
// 如果prime[p]没有被改变,那么它是一个素数
if(prime[p]) {
// 将p的倍数标记为非素数
for(int i = p*p; i <= n; i += p)
prime[i] = false;
}
}
// 输出小于等于n的所有素数
for(int p = 2; p <= n; ++p) {
if(prime[p])
std::cout << p << " ";
}
std::cout << std::endl;
}
```
这个程序首先包含了输入输出和向量头文件,然后在`main`函数中读取用户输入的数字n,并调用`printPrimes`函数来打印小于或等于n的所有素数。
`printPrimes`函数使用了一个布尔类型的向量`prime`来标记每个数字是否为素数。我们首先将所有数字标记为素数,然后从2开始遍历,对于每个标记为素数的数字p,将其所有大于等于p^2的倍数标记为非素数。最后,遍历整个向量,打印出标记为素数的数字。
阅读全文