素数C语言程序编写的关键在于高效判断数字是否为素数,通常采用试除法优化(如仅检查2到√n的整数)或更高级算法(如埃拉托斯特尼筛法)。以下分点详解实现方法:
-
基础试除法
- 从2开始遍历到目标数n-1,若n能被任意数整除则非素数。优化后只需遍历到√n,减少计算量。示例代码:
cCopy Code
int isPrime(int n) { if (n <= 1) return 0; for (int i = 2; i * i <= n; i++) if (n % i == 0) return 0; return 1; }
- 从2开始遍历到目标数n-1,若n能被任意数整除则非素数。优化后只需遍历到√n,减少计算量。示例代码:
-
埃拉托斯特尼筛法(适合批量生成素数)
- 通过标记倍数排除非素数,时间复杂度O(n log log n)。适用于预生成素数表:
cCopy Code
void sieve(int max) { int prime[max+1]; memset(prime, 1, sizeof(prime)); for (int p = 2; p * p <= max; p++) if (prime[p]) for (int i = p * p; i <= max; i += p) prime[i] = 0; }
- 通过标记倍数排除非素数,时间复杂度O(n log log n)。适用于预生成素数表:
-
性能优化技巧
- 跳过偶数:除2外,偶数均非素数,循环步长可设为2。
- 预存小素数:如先检查2、3、5的倍数,再进入循环。
总结:C语言素数程序的核心是平衡准确性与效率,根据需求选择单数判断或批量筛法。实际应用中可结合硬件特性(如并行计算)进一步优化。