HiveBrain v1.2.0
Get Started
← Back to all entries
patternswiftMinor

Project Euler #7 - 10001st prime

Submitted by: @import:stackexchange-codereview··
0
Viewed 0 times
projectprimeeuler10001st

Problem

I just finished Project Euler #7 in Swift, and since there is not any version yet on Code Review, I would like to have some comments on what I did to try to improve it.

By listing the first six prime numbers: 2, 3, 5, 7, 11, and 13, we can see that the 6th prime is 13.

What is the 10 001st prime number?

import Foundation

func isPrime(number:Int) -> Bool {
    
    if number == 1 {
        return false
    }
    else if number  Int {
    
    var xThPrime = prime - 1 // We skip the prime 2 with the += 2
    var number = 1
    
    while xThPrime > 0 {
        
        number += 2
        if isPrime(number) {
            xThPrime--
        }
    }
    
    return number
}

func printTimeElapsedWhenRunningCode(operation:(xThPrime:Int) -> Int) {
    let startTime = CFAbsoluteTimeGetCurrent()
    let number = operation(xThPrime: 10_001)
    println(number)
    let timeElapsed = CFAbsoluteTimeGetCurrent() - startTime
    println("Time elapsed : \(timeElapsed) s")
}

printTimeElapsedWhenRunningCode(getNumberForXthPrime)


The code executes in 0.0181439518928528 s.

Solution

for var i = 5; i <= maxPrime; i += 6 {
    if number % i == 0  || number % (i + 2) == 0 {
        return false
    }
}


We can implement some Swift syntax here:

for i in stride(from:5 through:maxPrime by: 6) {
    if number % i == 0 || number % (i + 2) == 0 {
        return false
    }
}


I don't know how this would compare in terms of performance however. I suspect it's the same or better however.

Code Snippets

for var i = 5; i <= maxPrime; i += 6 {
    if number % i == 0  || number % (i + 2) == 0 {
        return false
    }
}
for i in stride(from:5 through:maxPrime by: 6) {
    if number % i == 0 || number % (i + 2) == 0 {
        return false
    }
}

Context

StackExchange Code Review Q#74639, answer score: 5

Revisions (0)

No revisions yet.