Cameron's Blog - Perfect Numbers

Perfect Numbers

I just started reading a book called How to Prove It: A Structured Approach, a book all about writing and understanding proofs. My unconventional background in mathematics means that I have a fair bit of terror when it comes to proofs; they have often come up on more quantitative finance courses in a tangential manner, as the proofs are often unnessecary. The fact remains that I am terrified by them, and wanted to get over my fear of proofs.

In the process, I read a bit on perfect numbers. One of the proofs in the book was Euclid’s proof about infinite primes, and I figured I should write a little bit of code to find perfect numbers, for gits and shiggles.

Here’s the code to compute aliquot sums in Julia, a necessary intermediate step in perfect number evaluation.

using Primes

function aliquot(x::Int64, verbose=false)
    divisors = []
    for i in 1:x-1
        if(x%i == 0)
            append!(divisors, i)
        end
    end
    if verbose == true print(divisors) end
    return sum(divisors)
end

This is a function for computing the next prime number after integer \(x\).

function next_perfect(x::Int64, limit=Inf64)
    # Given a number, find the next highest perfect number.
    found = false
    while(found==false)
        # You can set a computational limit with the 'limit' argument.
        if (x >= limit) break end
        if aliquot(x) == x
            print(x, " is the next perfect number.")
            found=true
            break
        end
        x += 1
    end
    return x
end