在编程中,判断一个数是否为质数(也叫素数)是一个经典问题。对于小范围的数字,我们可以用简单的试除法;但当需要处理大量数字或频繁查询时,就需要更高效的算法。本文将详细介绍一种被广泛使用的高效算法——埃拉托斯特尼筛法(Sieve of Eratosthenes),并使用 C#语言 实现它。无论你是编程小白还是有一定基础的开发者,都能轻松掌握!
质数是指大于1且只能被1和自身整除的自然数。例如:2、3、5、7、11……都是质数。而4、6、8、9等则不是。
假设你要找出1到100万之间的所有质数。如果对每个数都用试除法(检查能否被2到√n整除),时间复杂度会非常高(约为O(n√n))。而埃氏筛的时间复杂度仅为O(n log log n),效率提升巨大!

该算法由古希腊数学家埃拉托斯特尼提出,核心思想是:逐个标记合数,剩下的就是质数。步骤如下:
isPrime[0..n],初始全部设为 true。false。i 是质数(即 isPrime[i] == true),则将其所有倍数(从 i*i 开始)标记为 false。true 的索引即为质数。下面是一个完整的 C# 代码示例,用于生成小于等于给定上限的所有质数:
using System;using System.Collections.Generic;class PrimeSieve{ public static List<int> SieveOfEratosthenes(int n) { // 创建布尔数组,初始全为 true bool[] isPrime = new bool[n + 1]; for (int i = 0; i <= n; i++) { isPrime[i] = true; } // 0 和 1 不是质数 isPrime[0] = false; isPrime[1] = false; // 从 2 开始筛选 for (int i = 2; i * i <= n; i++) { if (isPrime[i]) { // 标记 i 的所有倍数为合数 for (int j = i * i; j <= n; j += i) { isPrime[j] = false; } } } // 收集所有质数 List<int> primes = new List<int>(); for (int i = 2; i <= n; i++) { if (isPrime[i]) { primes.Add(i); } } return primes; } static void Main() { int limit = 100; var primes = SieveOfEratosthenes(limit); Console.WriteLine($"小于等于 {limit} 的质数有:"); Console.WriteLine(string.Join(", ", primes)); }}List<int>。埃氏筛非常适合批量生成质数的场景,比如:
注意:如果你只需要判断单个大数是否为质数,埃氏筛可能不是最优选择(因为要分配大数组),此时可考虑米勒-拉宾等概率算法。但对于 C#质数判定 中的批量需求,埃拉托斯特尼筛法 依然是最经典高效的方案之一。
通过本文,你已经掌握了如何用 C# 实现 埃拉托斯特尼筛法 来高效筛选质数。这种方法不仅逻辑清晰,而且性能优越,是学习 C#高效算法 的绝佳入门案例。希望你能动手敲一遍代码,加深理解!
如果你喜欢这篇教程,欢迎分享给更多正在学习 素数筛选 的朋友!
本文由主机测评网于2025-12-08发表在主机测评网_免费VPS_免费云服务器_免费独立服务器,如有疑问,请联系我们。
本文链接:https://www.vpshk.cn/2025124832.html