swift - 识别质数

标签 swift if-statement primes

出于某种原因,它总是给我错误的结果。无论将什么数字分配给“数字”变量,它始终是 isItPrime = true

这是我的代码:

let number = 6
var i = 1
var isItPrime: Bool?
while i < number {
    if number % i == 0 {
        isItPrime = false
    } else {
        isItPrime = true
    }
    i += 1
}
print(isItPrime)

有人可以向我解释我的代码有什么问题以及为什么 isItPrime bool 输出总是 true 吗?

最佳答案

问题1

你的 while 循环的最后一次迭代

while i < number {
    if number % i == 0 {
        isItPrime = false
    } else {
        isItPrime = true
    }
    i += 1
}

覆盖结果。

所以你总是得到以下结果

if number % (number-1) == 0 {
    isItPrime = false
} else {
    isItPrime = true
}

问题2

最后每个数都可以被1整除,所以你应该从2开始i。 所以

let number = 6
var i = 2
var isItPrime = true
while i < number {
    if number % i == 0 {
        isItPrime = false
        break
    }
}
print(isItPrime)

重构

您可以使用函数式编程编写类似的逻辑

let number = 5
let upperLimit = Int(Double(number).squareRoot())
let isPrime = !(2...upperLimit).contains { number % $0 == 0 }

关于swift - 识别质数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45784858/

相关文章:

c - #define 在 C 中使用 if-else 逻辑

javascript - 搞乱了我的 JavaScript 返回语句

java - 素数计算器需要太多时间(JAVA)

ios - UITableView 行分隔线在扩展单元格时行为不正确

swift - 如何使用 Swift 为两个具有两个不同选择复选标记的 UISegment 控件创建单个 TableView ?

ios - swift - firebase facebook 身份验证时出现 invalid_credentials 错误?

javascript - Javascript 中不打印素数

ios - 试图使UIAlertController似乎无法初始化

java - Java中 "if"的奇怪案例

python - 为什么我的埃拉托色尼筛法运行得这么慢?