c++利用数组筛选1-100之间的素数
时间: 2023-03-31 13:04:05 浏览: 170
可以使用以下代码来筛选1-100之间的素数:
#include <stdio.h>
int main() {
int prime[100] = {}; // 初始化数组
int count = ; // 记录素数个数
for (int i = 2; i <= 100; i++) {
if (prime[i] == ) { // 如果当前数还没有被标记为非素数
printf("%d ", i); // 输出当前素数
count++; // 素数个数加1
for (int j = i * i; j <= 100; j += i) {
prime[j] = 1; // 标记当前数的倍数为非素数
}
}
}
printf("\n共有%d个素数\n", count); // 输出素数个数
return ;
}
相关问题
c++求1-n中素数的个数
在C++中,计算1到n之间的素数个数可以采用埃拉托斯特尼筛法(Sieve of Eratosthenes)或者更为复杂一些的算法,如米勒-拉宾素数检验结合筛选。这里我们介绍一种常见的基于筛法的方法。
埃拉托斯特尼筛法的基本思想是从小到大逐个标记出所有合数(即非素数),然后计数剩余未被标记的数字,它们就是素数。以下是简单的步骤:
1. 创建一个大小为n+1的布尔数组isPrime,初始值全部设为true,表示从2到n的所有数字都是待检查的素数。
2. 遍历数组,从第一个质数2开始,将它的倍数都标记为合数(isPrime[i] = false)。接着找到下一个未被标记的数字(当前的i + i),重复这个过程直到i的平方大于n。
3. 数组中剩下的所有true元素对应的索引即为素数,计数即可。
```cpp
#include <iostream>
#include <vector>
int countPrimes(int n) {
std::vector<bool> isPrime(n+1, true);
isPrime[0] = isPrime[1] = false; // 0和1不是素数
for (int i = 2; i * i <= n; ++i) {
if (isPrime[i]) {
for (int j = i * i; j <= n; j += i)
isPrime[j] = false;
}
}
int primeCount = 0;
for (int i = 2; i <= n; ++i)
if (isPrime[i])
primeCount++;
return primeCount;
}
int main() {
int n;
std::cout << "Enter a number: ";
std::cin >> n;
int result = countPrimes(n);
std::cout << "Number of primes between 1 and " << n << " is: " << result << std::endl;
return 0;
}
```
编程c++数组找其中的素数
在C++中,我们同样可以使用埃拉托斯特尼筛法来查找数组中的素数。这里是一个简化版的示例,假设我们有一个整数数组`arr`,首先需要编写函数来筛选出素数并存储在一个新数组或原数组的部分位置。下面是基本步骤:
```cpp
#include <iostream>
#include <vector>
bool isPrime(int num) {
if (num <= 1)
return false;
for (int i = 2; i * i <= num; ++i) {
if (num % i == 0)
return false;
}
return true;
}
std::vector<int> findPrimesInArray(const std::vector<int>& arr) {
std::vector<int> primes;
for (const auto& num : arr) {
if (isPrime(num))
primes.push_back(num);
}
return primes;
}
int main() {
std::vector<int> arr = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
std::vector<int> result = findPrimesInArray(arr);
// 输出素数
for (const auto& prime : result)
std::cout << prime << " ";
return 0;
}
```
在这个例子中,`isPrime()`函数检查一个给定的数字是否为素数,而`findPrimesInArray()`函数遍历整个数组并只保留素数。返回的结果是包含数组中所有素数的新向量。
阅读全文