判定素数的3种方法-枚举法、筛素数法、六素数法
素数的定义
一个大于 1 的自然数,除了 1 和 它自身外,不能被其他自然数整除的数叫做质数;否则称合数(规定 1 即不是质数也不是合数)
枚举法
思路
我们可以根据素数的定义一步步写出函数判断一个数是否是素数
1)一个大于 1 的自然数
static boolean isPrime(int num) {
// 根据素数定义可知素数为大于 1 的自然数
if (num < 2) return false;
//...
}
2)除了 1 和 它自身外,不能被其他自然数整除的数叫做质数
static boolean isPrime(int num) {
// 根据素数定义可知素数为大于 1 的自然数
if (num < 2) return false;
for (int i = 2; i < num; i++) {
// 若除了 1 和 它自身外,num 能被 i 整除,则为合数,返回 false
if (num % i == 0)
return false;
}
// 找不到除了 1 和 它自身外,能被其他自然数整除的数,返回 true
return true;
}
上面这个函数已经可以判断一个 int
类型的数是否为素数了。
根据数学知识我们可以判断出 i i i 的最大值取到 sqrt(num)
优化后
static boolean isPrime(int num) {
if (num < 2) return false;
int k = (int) Math.sqrt(num) + 1;
for (int i = 2; i < k; i++) {
if (num % i == 0)
return false;
}
return true;
}
优化后的函数将时间复杂度从 O ( n ) O(n) O(n) 降到 O ( n ) O(\sqrt{n}) O(