C语言筛法求素数(质数)
作者:野牛程序员:2023-08-23 11:35:01C语言阅读 2910
使用筛法(Sieve of Eratosthenes)可以高效地找出一定范围内的所有素数(质数)。筛法的基本思想是从小到大遍历数字,并标记掉其所有的倍数,最终剩下的未被标记的数字即为素数。以下是用 C 语言实现筛法求素数的示例代码:
#include <stdio.h> #include <stdbool.h> void sieveOfEratosthenes(int n) { bool isPrime[n + 1]; // 初始化数组,假定所有数字都是素数 for (int i = 2; i <= n; i++) { isPrime[i] = true; } // 筛掉倍数 for (int i = 2; i * i <= n; i++) { if (isPrime[i]) { for (int j = i * i; j <= n; j += i) { isPrime[j] = false; } } } // 打印素数 printf("在区间 [2, %d] 内的素数有:\\n", n); for (int i = 2; i <= n; i++) { if (isPrime[i]) { printf("%d ", i); } } printf("\\n"); } int main() { int limit; printf("请输入一个正整数作为上限:"); scanf("%d", &limit); sieveOfEratosthenes(limit); return 0; }
在这段代码中,sieveOfEratosthenes
函数使用数组 isPrime
来标记每个数字是否为素数。首先将所有数字初始化为素数,然后从 2 开始遍历,如果当前数字是素数,则将其所有倍数标记为非素数。最后,遍历一遍数组,输出标记为素数的数字。
这段代码可以找出指定范围内的所有素数,运用了筛法的基本思想。请注意,筛法的时间复杂度是 O(n log log n),因此在实际应用中可以高效地找出大范围内的素数。
野牛程序员教少儿编程与信息学奥赛-微信|电话:15892516892

- 上一篇:C语言求两个正整数的最大公约数
- 下一篇:C语言选择法排序