From aaa12e97d61e881a87642a3103265aed4d12ab92 Mon Sep 17 00:00:00 2001 From: daviddoji Date: Wed, 11 Aug 2021 20:29:41 +0200 Subject: [PATCH] Solution to problem 23 in Julia --- src/Julia/Problem023.jl | 60 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 src/Julia/Problem023.jl diff --git a/src/Julia/Problem023.jl b/src/Julia/Problem023.jl new file mode 100644 index 0000000..bd1d940 --- /dev/null +++ b/src/Julia/Problem023.jl @@ -0,0 +1,60 @@ +#= +Created on 11 Aug 2021 + +@author: David Doblas Jiménez +@email: daviddoji@pm.me + +Solution for Problem 23 of Project Euler +https://projecteuler.net/problem=23 +=# + +function Problem23() + #= + A perfect number is a number for which the sum of its proper divisors is + exactly equal to the number. For example, the sum of the proper divisors + of 28 would be 1 + 2 + 4 + 7 + 14 = 28, which means that 28 is a perfect + number. + + A number n is called deficient if the sum of its proper divisors is less + than n and it is called abundant if this sum exceeds n. + + As 12 is the smallest abundant number, 1 + 2 + 3 + 4 + 6 = 16, the smallest + number that can be written as the sum of two abundant numbers is 24. By + mathematical analysis, it can be shown that all integers greater than 28123 + can be written as the sum of two abundant numbers. However, this upper + limit cannot be reduced any further by analysis even though it is known + that the greatest number that cannot be expressed as the sum of two + abundant numbers is less than this limit. + + Find the sum of all the positive integers which cannot be written as the + sum of two abundant numbers. + =# + LIMIT = 28123 + divisorsum = zeros(Int32,LIMIT) + for i in range(1, LIMIT, step=1) + for j in range(2i, LIMIT, step=i) + divisorsum[j] += i + end + end + abundantnums = [i for (i, x) in enumerate(divisorsum) if x > i] + + expressible = falses(LIMIT) + for i in abundantnums + for j in abundantnums + if i + j < LIMIT+1 + expressible[i + j] = true + else + break + end + end + end + + ans = sum(i for (i, x) in enumerate(expressible) if x == false) + return ans +end + + +println("Time to evaluate Problem 23:") +@time Problem23() +println("") +println("Result for Problem 23: ", Problem23())