C语言判断素数代码
时间: 2025-04-25 12:25:28 浏览: 34
### C语言实现判断素数的示例代码
#### 方法一:基本循环法
此方法通过遍历从2到`n-1`之间的所有整数来检查是否存在能整除`n`的因子。
```c
#include <stdio.h>
int main() {
int i, n;
printf("请输入一个正整数: ");
scanf("%d", &n);
for (i = 2; i <= n - 1; ++i) {
if (n % i == 0) {
break;
}
}
if (i >= n && n != 1) {
printf("%d 是素数\n", n);
} else {
printf("%d 不是素数\n", n);
}
return 0;
}
```
这种方法简单直观,但对于较大的数值效率较低[^3]。
#### 方法二:优化后的平方根算法
该方法仅需测试至√n即可确定是否为素数,减少了不必要的计算量。当找到一个小于等于√n的因数时,则可以断定这个数不是素数;反之则是素数。
```c
#include <stdio.h>
#include <math.h>
int main() {
int n, i;
double s;
printf("请输入一个正整数: ");
scanf("%d", &n);
if (n <= 1) {
printf("%d 不是素数\n", n);
return 0;
}
s = sqrt(n); // 计算输入数字的平方根
for (i = 2; i <= s; ++i) {
if (n % i == 0) {
printf("%d 不是素数\n", n);
return 0;
}
}
printf("%d 是素数\n", n);
return 0;
}
```
这段代码利用了数学上的性质——任何合数都至少有一个不大于其平方根的小于自身的因数,从而提高了性能[^2]。
#### 方法三:埃拉托斯特尼筛法(适用于批量筛选)
对于寻找一定范围内的全部素数来说,采用埃拉托斯特尼筛法更为高效。这里提供了一个简单的例子:
```c
#define MAX 100
bool primes[MAX + 1];
void sieveOfEratosthenes() {
memset(primes, true, sizeof(primes));
primes[0] = primes[1] = false;
for (int p = 2; p * p <= MAX; ++p) {
if (primes[p]) {
for (int i = p * p; i <= MAX; i += p)
primes[i] = false;
}
}
}
int main() {
sieveOfEratosthenes();
printf("小于等于%d 的素数有:\n", MAX);
for (int p = 2; p <= MAX; ++p)
if (primes[p])
printf("%d ", p);
return 0;
}
```
上述函数实现了经典的埃氏筛法,能够快速找出指定区间内所有的素数[^4]。
阅读全文
相关推荐



















