Way*_*ery 29
这是Swift 3中的一个功能解决方案:
func isPrime(_ number: Int) -> Bool {
return number > 1 && !(2..<number).contains { number % $0 == 0 }
}
Run Code Online (Sandbox Code Playgroud)
它首先确保数字大于1,然后创建一个范围从2到数字(不包括数字)并检查数字是否不能被范围中的每个数字整除
此主要检查功能和扩展是最有效的,因为它只检查 整数。
复杂:
func isPrime(_ n: Int) -> Bool {
guard n >= 2 else { return false }
guard n != 2 else { return true }
guard n % 2 != 0 else { return false }
return !stride(from: 3, through: Int(sqrt(Double(n))), by: 2).contains { n % $0 == 0 }
}
Run Code Online (Sandbox Code Playgroud)
延期:
extension Int {
var isPrime: Bool {
guard self >= 2 else { return false }
guard self != 2 else { return true }
guard self % 2 != 0 else { return false }
return !stride(from: 3, through: Int(sqrt(Double(self))), by: 2).contains { self % $0 == 0 }
}
}
Run Code Online (Sandbox Code Playgroud)
此代码相对于其他答案的好处是它不检查冗余数字。此代码仅检查一半的数字,直到所需数字的平方根。
由于我的声誉,我无法回复,但我发现Wayne Ellery的方法很棒.然而,如果可能的话,只需要一点点修复......
// that's Swift 3.1
import Foundation
func isPrime(_ number: Int) -> Bool {
// right below
if number == 2 || number == 3 { return true }
let maxDivider = Int(sqrt(Double(number)))
return number > 1 && !(2...maxDivider).contains { number % $0 == 0 }
}
Run Code Online (Sandbox Code Playgroud)
所有number值大于的整数除法器sqrt(number)都不是必需的.
| 归档时间: |
|
| 查看次数: |
30197 次 |
| 最近记录: |