Skip to content

Problem 7: 10001st prime

Link to the problem: https://projecteuler.net/problem=7.

Problem 7

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?

A simple solution

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
(defn isPrime []
  (-> (| (-> (ToFloat) (Math.Sqrt) (Math.Floor) (ToInt) >= .r
             5 >= .f
             true >= .isPrime))
      (| (When (Is 1) (-> false > .isPrime)))
      (| (When
          (-> (IsMore 2) (And) (Math.Mod 2) (Is 0))
          (-> false > .isPrime)))
      (| (When
          (-> (IsMore 3) (And) (Math.Mod 3) (Is 0))
          (-> false > .isPrime)))
      (When
       (-> .isPrime (And) .f (IsLessEqual .r))
       (Repeat
        (-> (When
             (-> (Math.Mod .f) (Is 0))
             (-> false > .isPrime))
            (When
             (-> (| (-> .f (Math.Add 2) >= .g))
                 (Math.Mod .g) (Is 0))
             (-> false > .isPrime))
            .f (Math.Add 6) > .f)
        :Forever true
        :Until (-> .isPrime (Not) (Or) .f (IsMore .r))))
      .isPrime))

(defwire main-wire
  10001 = .limit
  1 >= .count
  1 >= .candidate

  (Repeat
   (-> .candidate (Math.Add 2) > .candidate
       (When (isPrime) (Math.Inc .count)))
   :Forever true
   :Until (-> .count (Is .limit)))

  .candidate (Assert.Is 104743 true)
  (Log "Answer"))

(defmesh root)
(schedule root main-wire)
(run root)
[info] [2023-02-24 14:01:42.220] [T-3724] [logging.cpp::62] [main-wire] Answer: 104743

More details on the Project Euler's website: https://projecteuler.net/overview=007.