出于某种原因,它总是给我错误的结果。无论将什么数字分配给“数字”变量,它始终是 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/