Factorial primes

var factorial_primes = Enumerator({|f|
    for k in (1..Inf) {
        if (k!-1 -> is_prime) { f([k, -1]) }
        if (k!+1 -> is_prime) { f([k, +1]) }
    }
})

func abr(v) {
    v.len <= 40 ? v : (v.to_s.first(20) + '..' + v.to_s.last(20) + " (#{v.len} digits)")
}

factorial_primes.first(30).each_2d {|k,i|
    printf("%3d! %s %d = %s\n", k, (i.sgn < 0 ? '-' : '+'), i.abs, abr(k! + i))
}

Output:

  1! + 1 = 2
  2! + 1 = 3
  3! - 1 = 5
  3! + 1 = 7
  4! - 1 = 23
  6! - 1 = 719
  7! - 1 = 5039
 11! + 1 = 39916801
 12! - 1 = 479001599
 14! - 1 = 87178291199
 27! + 1 = 10888869450418352160768000001
 30! - 1 = 265252859812191058636308479999999
 32! - 1 = 263130836933693530167218012159999999
 33! - 1 = 8683317618811886495518194401279999999
 37! + 1 = 13763753091226345046..79581580902400000001 (44 digits)
 38! - 1 = 52302261746660111176..24100074291199999999 (45 digits)
 41! + 1 = 33452526613163807108..40751665152000000001 (50 digits)
 73! + 1 = 44701154615126843408..03680000000000000001 (106 digits)
 77! + 1 = 14518309202828586963..48000000000000000001 (114 digits)
 94! - 1 = 10873661566567430802..99999999999999999999 (147 digits)
116! + 1 = 33931086844518982011..00000000000000000001 (191 digits)
154! + 1 = 30897696138473508879..00000000000000000001 (272 digits)
166! - 1 = 90036917057784373664..99999999999999999999 (298 digits)
320! + 1 = 21161033472192524829..00000000000000000001 (665 digits)
324! - 1 = 22889974601791023211..99999999999999999999 (675 digits)
340! + 1 = 51008644721037110809..00000000000000000001 (715 digits)
379! - 1 = 24840307460964707050..99999999999999999999 (815 digits)
399! + 1 = 16008630711655973815..00000000000000000001 (867 digits)
427! + 1 = 29063471769607348411..00000000000000000001 (940 digits)
469! - 1 = 67718096668149510900..99999999999999999999 (1051 digits)

Last updated