合抱之木,生于毫末;九层之台,起于累土;千里之行,始于足下。💪🏻
C
语言 判断是否是素数
一、代码 ⭐️
c
#include <stdio.h>
#include <stdbool.h> // 使用 bool 类型
// 判断是否是素数的函数
bool isPrime(int num) {
if (num <= 1) {
return false; // 素数要大于1
}
if (num == 2) {
return true; // 2 是素数
}
if (num % 2 == 0) {
return false; // 偶数(除了 2)不是素数
}
// 检查从 3 到 sqrt(num) 的奇数
for (int i = 3; i * i <= num; 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;
}

二、部分代码分析 ⭐️
c
for (int i = 3; i * i <= num; i += 2) {
if (num % i == 0) {
return false; // 如果能被整除,则不是素数
}
}
因为质数是只能被
1
和它本身 整除的数,如果num
不是质数的话,那么它应该就可以表示成a*b=num
。如果a
和b
都大于num
的平方根的话,那么a*b
就会大于num
。就和前面a*b=num
矛盾了。所以说a
或者b
肯定有一个是小于或等于num
的平方根。因此for
循环那里i*i<=num
,后面那个i+=2
是为了保证每次检查的num
都是奇数,因为偶数除了2
以外,必然不是质数。如果一个数能通过平方根得出一个整数值,那么这个数肯定不是质数。所以那里的条件应该是
i<=根号num
。但是有可能是无理数,就不好比较啦。就通过i*i<=num
来实现。
