Эта логика ошибочна:
for var i = 2; i < userInput; i = i + 1 {
if userInput % i == 0 {
print("\(userInput) is not a prime number")
break
} else {
print("\(userInput) is a prime number")
break
}
}
if-else
неправильно. Скорее всего вам нужно пройти через if
часть цикла , проверяя, является ли каждое число фактором (if userInput % i == 0
), снова и снова; тогда и только тогда, если у вас есть закончен петля и еще не обнаружили фактора, можете ли вы заявить, что это должно быть простое.
Однако вам будет трудно преуспеть в написании этой логики, если вы установите все на плоском верхнем уровне, как вы это сделали. Проблема в том, что у вас нет возможности сделать правильный выход, когда вы находитесь на верхнем уровне. Поэтому ваша логика требует, чтобы вы положили все внутри функции, из которой вы можете сделать принудительный ранний выход, указав return
.
В этом переписывании, я сделал это, плюс я использовал switch
, который понятнее (и Swiftier), чем ваш if...else if
:
func testForPrime(userInput:Int) {
switch userInput {
case 0: print("0 is not a prime number")
case 1: print("1 is not a prime number")
case 2: print("2 is a prime number")
default:
for i in 2..<userInput {
if userInput % i == 0 {
print("\(userInput) is not a prime number")
return
}
}
print("\(userInput) is a prime number")
}
}
А вот как проверить:
for i in 0...20 {testForPrime(i)}
Выход:
0 is not a prime number
1 is not a prime number
2 is a prime number
3 is a prime number
4 is not a prime number
5 is a prime number
6 is not a prime number
7 is a prime number
8 is not a prime number
9 is not a prime number
10 is not a prime number
11 is a prime number
12 is not a prime number
13 is a prime number
14 is not a prime number
15 is not a prime number
16 is not a prime number
17 is a prime number
18 is not a prime number
19 is a prime number
20 is not a prime number
(Также обратите внимание, что я использовал Swift-стиль для цикла вместо вашего C-стиля для цикла. Вы должны привыкнуть к стилю Swift, потому что скоро в C-стиле для цикла будет удален с языка.)
не непосредственно реагировать на ваш вопрос, но имейте в виду, что вы не должны проверить все факторы больше, чем 'UserInput/3'. –
@ RomanSausarnes на самом деле ему не нужно проверять факторы за пределами квадратного корня 'userInput' – Cristik