Find largest left truncatable prime in a given base: Difference between revisions
Content added Content deleted
(Added Racket version) |
|||
Line 629: | Line 629: | ||
</pre> |
</pre> |
||
That is going to be big! |
That is going to be big! |
||
=={{header|Racket}}== |
|||
<lang racket> |
|||
#lang racket |
|||
(require math/number-theory) |
|||
(define (prepend-digit b d i n) |
|||
(+ (* d (expt b i)) n)) |
|||
(define (extend b i ts) |
|||
(define ts* |
|||
(for/list ([t (in-set ts)]) |
|||
(for/set ([d (in-range 1 b)] |
|||
#:when (prime? (prepend-digit b d i t))) |
|||
(prepend-digit b d i t)))) |
|||
(apply set-union ts*)) |
|||
(define (truncables b n) |
|||
; return set of truncables of length n in base b |
|||
(if (= n 1) |
|||
(for/set ([d (in-range 1 b)] #:when (prime? d)) d) |
|||
(extend b (- n 1) (truncables b (- n 1))))) |
|||
(define (largest b) |
|||
(let loop ([ts (truncables b 1)] |
|||
[n 1]) |
|||
(define ts* (extend b n ts)) |
|||
(if (set-empty? ts*) |
|||
(apply max (set->list ts)) |
|||
(loop ts* (+ n 1))))) |
|||
(for/list ([b (in-range 3 18)]) |
|||
(define l (largest b)) |
|||
; (displayln (list b l)) |
|||
(list b l)) |
|||
; Output: |
|||
'((3 23) |
|||
(4 4091) |
|||
(5 7817) |
|||
(6 4836525320399) |
|||
(7 817337) |
|||
(8 14005650767869) |
|||
(9 1676456897) |
|||
(10 357686312646216567629137) |
|||
(11 2276005673) |
|||
(12 13092430647736190817303130065827539) |
|||
(13 812751503) |
|||
(14 615419590422100474355767356763) |
|||
(15 34068645705927662447286191) |
|||
(16 1088303707153521644968345559987) |
|||
(17 13563641583101)) |
|||
</lang> |
|||
=={{header|Tcl}}== |
=={{header|Tcl}}== |