我正在尝试创建一个应用程序,让用户输入一个数字,应用程序将确定它是否为素数。这是我的代码:
var arr: [Int] = [2, 3, 4, 5, 6, 7, 8, 9]
let text = Int(textField.text!)!
for x in arr {
if text == 1 {
iLabel.text = "NOT PRIME!"
}
else if x == 2 || x == 3 || x == 5 || x == 7 {
iLabel.text = "IT'S PRIME!"
}
else if text % x == 0 {
iLabel.text = "NOT PRIME!"
break
}
else if text % x != 0 {
iLabel.text = "IT'S PRIME!"
break
}
}
在大多数情况下,这是有效的。但是,当我将变量“text”设置为82之类的结果时,结果是“IT'S PRIME!”尽管它可以被2整除... ...任何人都可以解释我的代码中的缺陷吗?
答案 0 :(得分:1)
if text == 1 else if x == 2 else if text % x == 0
^ ^ ^
它将触发x=2
并在进入模/余检查之前设置“IT'S PRIME`,然后它将跳过。它将在循环3,5,7处触发相同的事情。
82不能被8或9整除,因此不会在循环结束时触发余数检查并意外输出正确的值,在输出框中留下“IT''PRIME',而不实际检查是否是素数。