function isperfect{T<:Integer}(n::T) !isprime(n) || return false tal = 1//n hi = isqrt(n) if hi^2 == n tal += 1//hi hi -= 1 end for i in 2:hi (d, r) = divrem(n, i) if r == 0 tal += (1//i + 1//d) end end return tal == 1//1 end lo = 2 hi = 2^19 println("Searching for perfect numbers from ", lo, " to ", hi, ".") for i in 2:2^19 isperfect(i) || continue println(@sprintf("%8d", i)) end