c语言筛选法输出100以内的素数
时间: 2023-07-13 09:25:17 浏览: 164
下面是一种使用筛选法计算 100 以内素数的 C 语言程序:
```c
#include <stdio.h>
#include <stdbool.h>
int main() {
const int max = 100;
bool isPrime[max+1];
for (int i = 2; i <= max; i++) {
isPrime[i] = true;
}
for (int i = 2; i * i <= max; i++) {
if (isPrime[i]) {
for (int j = i * i; j <= max; j += i) {
isPrime[j] = false;
}
}
}
for (int i = 2; i <= max; i++) {
if (isPrime[i]) {
printf("%d ", i);
}
}
return 0;
}
```
程序中的 `isPrime` 数组用于记录某个数字是否为素数,初始化为 `true`。然后从 2 开始,如果它是素数,就把它的倍数都标记为非素数,最后输出所有标记为素数的数字。
这个算法的时间复杂度为 O(nloglogn),比试除法更优秀。
相关问题
c语言筛选法求200以内素数
以下是使用筛选法求200以内素数的C语言代码:
```
#include <stdio.h>
int main()
{
int n = 200;
int prime[201] = {0}; // 初始化数组,0表示未筛选,1表示合数,2表示素数
int i, j;
for (i = 2; i <= n; i++)
{
if (prime[i] == 0) // i为素数
{
printf("%d ", i);
for (j = i * i; j <= n; j += i) // 将i的倍数标记为合数
{
prime[j] = 1;
}
prime[i] = 2; // 标记i为素数
}
}
return 0;
}
```
该程序使用了一个数组 `prime` 来记录每个数字的状态,初始时所有数字都被标记为未筛选。程序从2开始枚举每个数字,如果该数字未被标记为合数,则输出该数字并将其倍数标记为合数。最后,被标记为素数的数字被标记为2。
用C语言筛选法求100以内的素数
在C语言中,我们可以使用筛法(Sieve of Eratosthenes)来找出100以内的所有素数。这是一种简单而高效的算法,步骤如下:
1. 创建一个大小为101的布尔数组`isPrime[101]`,初始化所有的元素为true,因为默认认为所有数字都是质数(除了0和1)。
2. 从2开始,遍历到100的平方根(因为大于这个数的所有因子肯定小于它本身)。对于每个遍历到的素数`i`:
- 将`isPrime[i]`设为false,表示i不是素数,因为它已经找到了一个因子(即它自身)。
- 遍历`i`的倍数,将它们对应的`isPrime[j * i]`也设为false,因为它们已经被`i`整除,所以不是素数。
3. 最后,遍历`isPrime`数组,将所有值为true的索引对应的位置的数输出,即为100以内的素数。
以下是简单的C代码实现:
```c
#include <stdio.h>
#include <stdbool.h>
#define LIMIT 100
void sieve_of_eratosthenes(bool isPrime[]) {
for (int i = 2; i * i <= LIMIT; i++) {
if (isPrime[i]) {
for (int j = i * i; j <= LIMIT; j += i) {
isPrime[j] = false;
}
}
}
}
int main() {
bool primes[LIMIT + 1];
memset(primes, true, sizeof(primes));
sieve_of_eratosthenes(primes);
printf("100以内的素数有:");
for (int i = 2; i <= LIMIT; i++) {
if (primes[i])
printf("%d ", i);
}
return 0;
}
```
阅读全文
相关推荐













