Solution to problem 23 in Julia
This commit is contained in:
parent
96a3ebd601
commit
aaa12e97d6
60
src/Julia/Problem023.jl
Normal file
60
src/Julia/Problem023.jl
Normal file
@ -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())
|
Loading…
x
Reference in New Issue
Block a user