判断一个数是否为质数的C语言实现
质数是指大于1的自然数,除了1和它本身外,不能被其他自然数整除的数,以下是几种在C语言中判断质数的方法:

(图片来源网络,侵删)
方法1:简单试除法
#include <stdio.h>
#include <stdbool.h>
bool isPrime(int num) {
if (num <= 1) {
return false;
}
for (int i = 2; i < num; i++) {
if (num % i == 0) {
return false;
}
}
return true;
}
int main() {
int num;
printf("请输入一个整数: ");
scanf("%d", &num);
if (isPrime(num)) {
printf("%d 是质数\n", num);
} else {
printf("%d 不是质数\n", num);
}
return 0;
}
方法2:优化试除法(只需检查到平方根)
#include <stdio.h>
#include <stdbool.h>
#include <math.h>
bool isPrime(int num) {
if (num <= 1) {
return false;
}
if (num == 2) {
return true;
}
if (num % 2 == 0) {
return false;
}
int sqrtNum = sqrt(num) + 1;
for (int i = 3; i <= sqrtNum; i += 2) {
if (num % i == 0) {
return false;
}
}
return true;
}
int main() {
int num;
printf("请输入一个整数: ");
scanf("%d", &num);
if (isPrime(num)) {
printf("%d 是质数\n", num);
} else {
printf("%d 不是质数\n", num);
}
return 0;
}
方法3:埃拉托斯特尼筛法(适合判断多个数是否为质数)
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
#include <math.h>
void sieveOfEratosthenes(int n) {
bool *isPrime = (bool *)malloc((n + 1) * sizeof(bool));
for (int i = 0; i <= n; i++) {
isPrime[i] = true;
}
isPrime[0] = isPrime[1] = false;
for (int p = 2; p * p <= n; p++) {
if (isPrime[p]) {
for (int i = p * p; i <= n; i += p) {
isPrime[i] = false;
}
}
}
printf("小于等于 %d 的质数有: ", n);
for (int p = 2; p <= n; p++) {
if (isPrime[p]) {
printf("%d ", p);
}
}
printf("\n");
free(isPrime);
}
int main() {
int n;
printf("请输入一个整数: ");
scanf("%d", &n);
sieveOfEratosthenes(n);
return 0;
}
注意事项
- 方法1是最简单的实现,但对于大数效率较低
- 方法2通过检查到平方根和跳过偶数大大提高了效率
- 方法3适合需要判断多个数是否为质数的场景
- 对于非常大的数(如超过10^9),可能需要更高级的算法或使用大数库
选择哪种方法取决于你的具体需求和输入数字的范围。

(图片来源网络,侵删)
