Welcome to the Treehouse Community
Want to collaborate on code errors? Have bugs you need feedback on? Looking for an extra set of eyes on your latest project? Get support with fellow developers, designers, and programmers of all backgrounds and skill levels here with the Treehouse Community! While you're at it, check out some resources Treehouse students have shared here.
Looking to learn something new?
Treehouse offers a seven day free trial for new students. Get access to thousands of hours of content and join thousands of Treehouse students and alumni in the community today.
Start your free trial
Michael Henry
14,601 PointsUsing for loop to write a prime number list in Swift
I am trying to take Amit's FizzBuzz challenge in "Swift Basics" one step further by writing a program that lists the prime numbers from 1-100. There must be a more efficient way to do this than the way I am doing it - and I cannot figure out how to include the numbers less than 10. See below:
import UIKit
let numbers = 1...100
for number in numbers {
if (number % 2 == 0) {
println(number)
} else if (number % 3 == 0) {
println(number)
} else if (number % 4 == 0) {
println(number)
} else if (number % 5 == 0) {
println(number)
} else if (number % 6 == 0) {
println(number)
} else if (number % 7 == 0) {
println(number)
} else if (number % 8 == 0) {
println(number)
} else if (number % 9 == 0) {
println(number)
} else {
println("Prime")
}
}
}
6 Answers
Benjamin Bell
4,364 PointsSame version but cleaned up
import UIKit
let numbers = 1...100
for n in numbers {
//set the flag to true initially
var prime = true
for var i = 2; i <= n - 1; i++ {
//even division of a number thats not 1 or the number itself, not a prime number
if n % i == 0 {
prime = false
break
}
}
if prime == false {
println("\(n) is not a prime number.")
} else {
println("\(n) is a prime number.")
}
}
Stone Preston
42,016 Pointsyes that is not the way to go about doing it.
A prime number is only divisible by one and itself. If its divisible by any number between 1 and itself then it is not prime.
you just need to use 2 for loops. one to loop through your list of numbers, and one to see if any numbers between 2 and the number itself divide into it evenly. If a number between 2 and the number does divide evenly (without a remainder so the modulo would be 0) then its not prime
let numbers = 1...100
for number in numbers {
//set the flag to true initially
var prime = true
for var i = 2; i <= number - 1; i++ {
//even division of a number thats not 1 or the number itself = not a prime number
if number % i == 0 {
prime = false
break
}
}
if prime == false {
println("\(number) is not prime.")
} else {
println("\(number) is prime.")
}
}
ivan akulov
4,174 PointsHere is good code for finding primes on swift 3:
func primes(n: Int) -> [Int] {
var numbers = [Int](2 ..< n)
for i in 0..<n - 2 {
let prime = numbers[i]
guard prime > 0 else { continue }
for multiple in stride(from: 2 * prime - 2, to: n - 2, by: prime){
numbers[multiple] = 0
}
}
return numbers.filter{ $0 > 0 }
}
primes(n: 100)
Michael Henry
14,601 PointsThank you both for your thoughts. But what happens when number = 1? Doesn't the algorithm crash because in the first iteration, 2 <= (2 - 1)? (which is false)? Or am I missing something very fundamental?
Stone Preston
42,016 Pointsit wont crash. the loop just wont run any when the number is 1 since 2 <= (2 - 1) is false. the condition must be true for the loop to run .
Jason Anello
Courses Plus Student 94,610 PointsI think the outer loop should start at 2 because 1 is not a prime number. 2 is the smallest prime number.
Stone Preston
42,016 Pointsgood point. I was thinking 1 is a prime number, but its not. If you wanted to print out all the numbers from 1 to 100 you could use an if statement to check for the number 1 since its a special case:
let numbers = 1...100
for number in numbers {
if number == 1 {
println("\(number) is not prime")
} else {
//set the flag to true initially
var prime = true
for var i = 2; i <= number - 1; i++ {
//even division of a number thats not 1 or the number itself = not a prime number
if number % i == 0 {
prime = false
break
}
}
if prime == false {
println("\(number) is not prime.")
} else {
println("\(number) is prime.")
}
}
}
Michael Henry
14,601 PointsThank you to both - that is very helpful
Mikkel Storch
1,955 PointsHello Can you tell what exactly happens in this statement:
for var i = 2; i <= number - 1; i++ { //even division of a number thats not 1 or the number itself = not a prime number if number % i == 0 { prime = false break }
Thanks ;-)
Sukriti Nepal
2,573 Points// Prime Number without the use of boolean in Swift
var ranges = 1...100 for range in ranges { for ( var count = 2;count <= range;count++) { if range%count == 0 && count != range { println ("(range) is divisible by (count) hence it is not a prime number") break } else if (count == range) { println ("(range) is a prime number") } } }