怎么判断一个整数是否是素数?
什么是素数?
- 一个大于 1 的自然数,除了 1 和它自身外,不能被其他自然数整除的数叫做素数;否则称为合数
- 0 和 1 既不是质数也不是合数,最小的质数是 2
判断一个整数是否是素数,我们会三种常见方法。
最简单的方法
func checkPrime(_ num: Int) -> Bool {
guard num > 3 else { return num > 1 }
for i in 2...(num-1) {
if num % i == 0 {
return false
}
}
return true
}
优化方法一
func checkPrime(_ num: Int) -> Bool {
guard num > 3 else { return num > 1 }
for i in 2...(num / 2) {
if num % i == 0 {
return false
}
}
return true
}
假设 n 是一个素数,那么它可能的最小整除约数是 2,而可能的最大整除约数是 n/2。
所以我们可以得到结论:如果一个数 n 是素数,那么在 (2...n/2) 之间一定有一个可以被其整除的数。
优化方法二
func checkPrime(_ num: Int) -> Bool {
guard num > 3 else { return num > 1 }
for i in 2...Int(sqrt(Double(num))) {
if num % i == 0 {
return false
}
}
return true
}
假设 n 是一个素数,则肯定存在 n = a * b
(a 和 b 不能是 1 或者 n)。我们又知道 n = sqrt(n) * sqart(n)
。所以 a 和 b 只有两种可能:
- a 和 b 都等于 sqrt(n)
- a 和 b 一个大于 sqrt(n),另一个小于 sqrt(n)
所以我们可以得到结论:如果一个数 n 是素数,那么在 (2...sqrt(n)) 之间一定有一个可以被其整除的数。