Yan Cui

I help clients go faster for less using serverless technologies.

**This article is brought to you by**

**Hookdeck: The Serverless Event Gateway
**

Hookdeck is a reliable and scalable serverless event gateway for sending, receiving, authenticating, transforming, filtering, and routing events between services in your event-driven architecture.

#### Problem

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

What is the 10001^{st}prime number?

#### Solution

open System let findFactorsOf(n) = let upperBound = int32(Math.Sqrt(double(n))) [2..upperBound] |> Seq.filter (fun x -> n % x = 0) let isPrime(n) = findFactorsOf(n) |> Seq.length = 0 let primeNumbers = Seq.unfold (fun x -> Some(x, x + 1)) 2 |> Seq.filter isPrime let p = primeNumbers |> Seq.nth(10000)

Here I borrowed the *findFactors* and *isPrime* functions I first used in the problem 3 solution, except this time they don’t have to be constrained to work *int64* types.

The rest of the solution’s pretty straight forward too, to find the 10001st prime number I first need to generate the sequence of all prime numbers. I did so by using Seq.unfold to generate the list of all natural numbers equal or greater than 2 (the first prime number), coupled with the *isPrime* predicate:

let primeNumbers = Seq.unfold (fun x -> Some(x, x + 1)) 2 |> Seq.filter isPrime

With the sequence of all prime numbers at hand, Seq.nth is used to find the element at the index position 10000 (sequences are zero-indexed like arrays, so this is actually the 10001st element in the sequence) to get our answer!

**Whenever you’re ready, here are 4 ways I can help you:**

**Production-Ready Serverless**: Join 20+ AWS Heroes & Community Builders and 1000+ other students in levelling up your serverless game. This is your one-stop shop for**quickly levelling up your serverless skills**.- Do you want to know
**how to test serverless architectures**with a fast dev & test loop? Check out my latest course,**Testing Serverless Architectures**and learn the smart way to test serverless. - I help clients
**launch product ideas**,**improve their development processes**and**upskill their teams**. If you’d like to work together, then let’s**get in touch**. **Join my community on Discord**, ask questions, and join the discussion on all things AWS and Serverless.

Omuhere’s another solution

let p7 q =

let isPrime n =

let rec check = function

|i when i > n/2I -> true

|i when n % i = 0I -> false

|i -> check (i+1I)

check 2I

let rec loop nth = function

|o when isPrime o -> //printfn “%A %A” o nth

match nth with

|x when x = q -> o

|_ -> loop (nth + 1I) (o + 1I)

|o -> loop nth (o+1I)

loop 1I 2I