检查一个数字是否为素数?

Agu*_*ias -3 swift

我正在尝试创建一个应用程序来检查数字是否为素数.

有人可以帮我查一下这个号码吗?

我需要一个简单的答案,而不是非常先进的算法.我是编程新手.

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到数字(不包括数字)并检查数字是否不能被范围中的每个数字整除

  • 功能最慢的唇膏 (6认同)
  • 对于大量用户,这非常慢。假设N被i整除需要1 ms。因此,假设N = 1500450271(Prime)花费的时间= 1 ms *除数-&gt; 1 ms * 1500450271-&gt; 11.5天。替代地,1ms *除数= 1ms * 1500450271的平方根=大约40000ms = 40秒。 (2认同)

Noa*_*der 9

最快的Prime Checker

Swift 4.2,Xcode 10.1

此主要检查功能和扩展是最有效的,因为它只检查 式 整数。

复杂: 式


解:

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)

怎么运行的

此代码相对于其他答案的好处是它不检查冗余数字。此代码仅检查一半的数字,直到所需数字的平方根。



Iva*_*rov 5

由于我的声誉,我无法回复,但我发现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)都不是必需的.