我正在学习swift,我想知道为什么要遵循以下代码:
func isNumberDivisible(_ number: Int, by divior: Int) -> Bool {
if number % divior == 0 {
return true;
} else {
return false;
}
}
func isPrime (_ number: Int) -> Bool {
var isPrimeNumber = false
for index in 0..<number {
if (isNumberDivisible(number, by:index )) {
isPrimeNumber = false
} else {
isPrimeNumber = true
}
}
return isPrimeNumber
}
isPrime(10)
输出错误 - 执行被中断,EXC_BAD_INSTRUCTION ..
答案 0 :(得分:4)
您的for loop
从零开始。这是一个毫无意义的测试,检查你是否可以除以1。
您应该以2
开始索引for index in 2..<number {
一旦你发现它不是一个素数,你应该停止 - 这个函数实际打印出来的是这个数字是否可以被(数字 - 1)整除。正如@rmaddy指出的那样,你不需要检查每个数字 - 在你的例子中10可以被2和5整除 - 但你不需要检查5,因为你将在2上失败
for index in 2..<Int(sqrt(Double(number))) {
if (isNumberDivisible(number, by:index )){
isPrimeNumber = false
break
} else{
isPrimeNumber = true
}
}
答案 1 :(得分:3)
%
)执行除法number % divior
执行10/0 除以零会导致运行时错误。
顺便说一句,第一个素数是2
for index in 2..<number
并且您的算法无论如何都无效。