Fermat pseudoprimes

func generate_fermat_psp(base, upto, n) {

    if (base == 1) {
        return(n.by { .is_composite }, upto.composite_count)
    }

    var psp = []

    for k in (1..Inf) {
        break if (k.pn_primorial > upto)
        psp << k.fermat_psp(base, 1, upto)...
    }

    return(psp.sort.first(n), psp.len)
}

var upto = 1e7

for base in (1..20) {
    var (psp, count) = generate_fermat_psp(base, upto, 20)
    printf("Base %2d - up to #{upto}: %7d  First 20: %s\n", base, count, psp)
}

Output:

Last updated

Was this helpful?