The challenge asks for you to write code that determines if a number is prime.

I’m having troubles figuring out one line of code from the solutions. It’s down below next to my comment.

Challenge A

func isNumberDivisible(number: Int, by byNumber: Int) -> Bool {

return number % byNumber == 0

}

func isPrime(number: Int) -> Bool {

if number < 0 {

return false

}

if number <= 3 {

return true

}

let root = Int(sqrt(Double(number))) **// WHAT IS THIS LINE DOING?**

for i in 2…root {

if isNumberDivisible(number, by: i) {

return false

}

}

return true

}

OK, unwrap it from the inside out!

First, it takes the value of number and makes it a Double (it was an Int when received by this function). Double is the required type to use the sqrt function to get the square root of a value. Computers are stupid, remember? 4.0 is not even remotely close to the same thing as 4 unless you explicitly cast it to be the same.

Next the sqrt function is used to get the square root of the value. The result of sqrt is also a Double, that is, a double-precision floating point number. But you don’t want that, you want an Int so that it can be a value in a loop range - so it is cast to Int, acceptable for a loop range specifier.

1 Like

Thank you very much. I just learned casting Ints to Double in the process as well.