Factor-perfect numbers

func erdosFactorCount (n) is cached {

    var sum = 1
    var divs = proper_divisors(n).slice(1)

    divs.each {|d|
        sum += __FUNC__(idiv(n,d))
    }

    return sum
}

func moreMultiples (to, from) {
    var oneMores = []
    from.each {|j|
        if (j > to.tail && to.tail.divides(j)) {
            oneMores << [to..., j]
        }
    }
    for k in (oneMores.range) {
        oneMores << __FUNC__(oneMores[k], from)...
    }
    return oneMores
}

var listing = [[1]]
listing << moreMultiples([1], proper_divisors(48))...
listing.each {|a| a << 48 }

say "#{listing.len} sequences using first definition:"
listing.slices(3).each { .map { .join(' ') }.map{ '%-20s' % _ }.join.say }

var listing2 = gather {
    for j in (^listing.len) {
        var seq = listing[j]
        take(1..seq.end -> map {|j| seq[j] / seq[j-1] })
    }
}

say "\n#{listing2.len} sequences using second definition:"
listing2.slices(3).each { .map { .join(' ') }.map{ '%-20s' % _ }.join.say }

print "\nOEIS A163272: "
say [0, 1, (1..Inf -> lazy.map {|n| 4*n }.grep{|n| erdosFactorCount(n) == n }.first(5))...]

Output:

48 sequences using first definition:
1 48                1 2 48              1 3 48
1 4 48              1 6 48              1 8 48
1 12 48             1 16 48             1 24 48
1 2 4 48            1 2 6 48            1 2 8 48
1 2 12 48           1 2 16 48           1 2 24 48
1 2 4 8 48          1 2 4 12 48         1 2 4 16 48
1 2 4 24 48         1 2 4 8 16 48       1 2 4 8 24 48
1 2 4 12 24 48      1 2 6 12 48         1 2 6 24 48
1 2 6 12 24 48      1 2 8 16 48         1 2 8 24 48
1 2 12 24 48        1 3 6 48            1 3 12 48
1 3 24 48           1 3 6 12 48         1 3 6 24 48
1 3 6 12 24 48      1 3 12 24 48        1 4 8 48
1 4 12 48           1 4 16 48           1 4 24 48
1 4 8 16 48         1 4 8 24 48         1 4 12 24 48
1 6 12 48           1 6 24 48           1 6 12 24 48
1 8 16 48           1 8 24 48           1 12 24 48

48 sequences using second definition:
48                  2 24                3 16
4 12                6 8                 8 6
12 4                16 3                24 2
2 2 12              2 3 8               2 4 6
2 6 4               2 8 3               2 12 2
2 2 2 6             2 2 3 4             2 2 4 3
2 2 6 2             2 2 2 2 3           2 2 2 3 2
2 2 3 2 2           2 3 2 4             2 3 4 2
2 3 2 2 2           2 4 2 3             2 4 3 2
2 6 2 2             3 2 8               3 4 4
3 8 2               3 2 2 4             3 2 4 2
3 2 2 2 2           3 4 2 2             4 2 6
4 3 4               4 4 3               4 6 2
4 2 2 3             4 2 3 2             4 3 2 2
6 2 4               6 4 2               6 2 2 2
8 2 3               8 3 2               12 2 2

OEIS A163272: [0, 1, 48, 1280, 2496, 28672, 29808]

Last updated