用埃拉托色尼筛选法输出 100 以内的所有素数。
时间: 2023-09-11 08:07:26 浏览: 195
好的,我可以帮您解答这个问题。以下是埃拉托色尼筛选法输出 100 以内的所有素数的代码:
```python
# 初始化列表,用布尔值表示每个数是否为素数
is_prime = [True] * 101
is_prime[0] = is_prime[1] = False
# 遍历 2 到 100,将素数的倍数标记为合数
for i in range(2, int(100 ** 0.5) + 1):
if is_prime[i]:
for j in range(i * i, 101, i):
is_prime[j] = False
# 输出素数
for i in range(2, 101):
if is_prime[i]:
print(i, end=' ')
```
这个算法首先将所有数都初始化为素数,然后从 2 开始遍历到 100 的平方根(因为超过平方根的因子肯定已经被标记过了),如果当前数是素数,就将它的倍数都标记为合数。最后输出所有素数即可。
相关问题
埃拉托色尼筛选法c语言
埃拉托色尼筛选法是一种用于求解素数的算法,其基本思想是先将所有数都标记为素数,然后从2开始,将其所有的倍数标记为合数,重复这个过程,直到所有的数都被标记过。
以下是C语言实现埃拉托色尼筛选法的代码:
```c
#include <stdio.h>
void sieve(int n) {
// 初始化数组,将所有数都标记为素数
int prime[n+1];
for (int i = 0; i <= n; i++) {
prime[i] = 1;
}
// 从2开始,将其所有的倍数标记为合数
for (int p = 2; p * p <= n; p++) {
if (prime[p] == 1) {
for (int i = p * p; i <= n; i += p) {
prime[i] = 0;
}
}
}
// 输出素数
for (int p = 2; p <= n; p++) {
if (prime[p] == 1) {
printf("%d ", p);
}
}
}
int main() {
int n;
printf("Enter the value of n: ");
scanf("%d", &n);
printf("The prime numbers smaller than or equal to %d are: \n", n);
sieve(n);
return 0;
}
```
在这个代码中,我们首先定义了一个函数`sieve`来实现筛选法,该函数接受一个整数`n`作为参数。在函数中,我们首先初始化一个长度为`n+1`的数组`prime`,将其所有的元素都标记为素数。然后,我们从2开始,将其所有的倍数标记为合数。最后,我们输出所有标记为素数的数。
在`main`函数中,我们首先获取用户输入的一个整数`n`,然后调用`sieve`函数来求解小于等于`n`的所有素数。
c++埃拉托色尼筛选法
埃拉托斯特尼筛法(Sieve of Eratosthenes)是一种用于找出给定范围内所有素数的古老算法。其基本思想是从2开始,将每个素数的倍数标记为非素数,直到遍历完整个范围。
以下是用 C 语言实现埃拉托斯特尼筛法的代码:
```c
#include <stdio.h>
#include <stdbool.h>
void sieveOfEratosthenes(int n) {
bool primes[n+1];
memset(primes, true, sizeof(primes));
for (int p = 2; p * p <= n; p++) {
if (primes[p] == true) {
for (int i = p * p; i <= n; i += p)
primes[i] = false;
}
}
printf("Prime numbers within the range 2 to %d are:\n", n);
for (int p = 2; p <= n; p++) {
if (primes[p])
printf("%d ", p);
}
}
int main() {
int n;
printf("Enter the upper limit: ");
scanf("%d", &n);
sieveOfEratosthenes(n);
return 0;
}
```
上述代码中,我们首先创建一个布尔数组 `primes` ,用于标记是否为素数。初始时,我们假设所有数字都是素数。
然后,我们从2开始遍历数组,如果当前数字是素数,就将它的倍数标记为非素数。这样我们就能筛选出范围内的素数。
最后,我们打印出范围内的素数。
阅读全文