Wolstenholme numbers

say "Wolstenholme numbers:"

for n in (1..20) {
    say ("#{'%5s'%n}: ", sum(1..n, {|k| 1/k**2 }).nu)
}

for n in (500, 1000, 2500, 5000, 10000) {
    var w = Str(sum(1..n, {|k| 1/k**2 }).nu)
    say ("#{'%5s'%n}: ", w.first(20), '...', w.last(20), " (#{w.len} digits)")
}

say "\nPrime Wolstenholme numbers:"

Enumerator({|callback|
    var w = 0
    for k in (1..Inf) {
        w += 1/k**2
        if (w.nu.is_prime) {
            callback([k, w.nu])
        }
    }
}).first(15).each_2d {|n,p|
    var w = Str(p)
    if (w.len > 50) {
        w = join('', w.first(20), '...', w.last(20), " (#{w.len} digits)")
    }
    say ("#{'%5s'%n}: ", w)
}

Output:

Last updated

Was this helpful?