素数判断
目录
1. 题型解释
-
素数:素数(质数)是指大于 1 的自然数,且只能被 1 和它本身整除的数。例如,2、3、5、7 是素数,而 4、6、8 不是素数。
-
素数判断:给定一个整数,判断它是否为素数。
2. 例题问题描述
问题:素数判断
输入一个整数 nn,判断它是否为素数。如果是素数,输出 true
;否则输出 false
。
示例:
-
输入:
7
-
输出:
true
-
输入:
10
-
输出:
false
3. C语言代码实现
解法 1:暴力法(简单)
c
#include <stdio.h>
#include <stdbool.h>
bool isPrime(int n) {
if (n <= 1) return false; // 1 及以下的数不是素数
for (int i = 2; i < n; i++) {
if (n % i == 0) return false; // 如果 n 能被 i 整除,则不是素数
}
return true; // 否则是素数
}
int main() {
int n = 7;
if (isPrime(n)) {
printf("%d is prime.\n", n);
} else {
printf("%d is not prime.\n", n);
}
return 0;
}
代码逻辑解释:
-
如果 n≤1n≤1,直接返回
false
,因为 1 及以下的数不是素数。 -
使用
for
循环从 2 到 n−1n−1,检查 nn 是否能被 ii 整除。 -
如果 nn 能被任意 ii 整除,返回
false
。 -
如果循环结束仍未找到能整除 nn 的数,返回
true
。
时间复杂度:O(n)O(n)。
解法 2:优化暴力法(中等)
c
#include <stdio.h>
#include <stdbool.h>
#include <math.h>
bool isPrime(int n) {
if (n <= 1) return false;
for (int i = 2; i <= sqrt(n); i++) { // 只需检查到 sqrt(n)
if (n % i == 0) return false;
}
return true;
}
int main() {
int n = 7;
if (isPrime(n)) {
printf("%d is prime.\n", n);
} else {
printf("%d is not prime.\n", n);
}
return 0;
}
代码逻辑解释:
-
如果 n≤1n≤1,直接返回
false
。 -
使用
for
循环从 2 到 nn,检查 nn 是否能被 ii 整除。 -
如果 nn 能被任意 ii 整除,返回
false
。 -
如果循环结束仍未找到能整除 nn 的数,返回
true
。
时间复杂度:O(n)O(n)。