// 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?
//
// Note: this is not meant to be the most efficient solution, primarily as an example written in Objective-C.
#import <Foundation/Foundation.h>
NSInteger prime(NSInteger number) {
// prime numbers are only divisble by itself and one
// Steps
// 1. if 'n' is divisble by 2 it is not a prime
// 2. if 'n' is divisble by 3 it is not a prime
// 3. divide by each number between 2 and n^1/2 inclusive
NSMutableArray *primes; // an array to contain prime numbers (not necessary, but it's nice to have them)
primes = [[NSMutableArray alloc] initWithObjects:[NSNumber numberWithInteger:2], [NSNumber numberWithInteger:3] , nil]; // 2 and 3 are base cases so we will manually add these values
NSInteger primeCheckValue = 4; // we will start checking for primes at number 4
BOOL isPrime = false; // this will be set to 'true' when a prime has been found and reset to false at the start of the loop
while (primes.count < number) {
if (primeCheckValue % 2 == 0 || primeCheckValue % 3 == 0) { // Step 1 and 2
isPrime = false;
} else {
for (NSInteger i = 2; i <= sqrt(primeCheckValue); i++) { // Step 3
if (primeCheckValue % i == 0) {
isPrime = false;
break;
} else {
isPrime = true;
}
}
}
if (isPrime == true) {
[primes addObject:[NSNumber numberWithInteger:primeCheckValue]];
isPrime = false;
}
primeCheckValue++;
}
return [[primes objectAtIndex:number-1] integerValue];
}
int main(int argc, const char * argv[])
{
@autoreleasepool {
NSLog(@"%ld", (long)prime(10001)); // Output: 104743
}
return 0;
}