julia implementation for problems 2, 3 and 5
This commit is contained in:
parent
65b6786569
commit
fa482c9809
3 changed files with 102 additions and 0 deletions
23
2/euler002.jl
Executable file
23
2/euler002.jl
Executable file
|
@ -0,0 +1,23 @@
|
||||||
|
#!/usr/bin/julia
|
||||||
|
|
||||||
|
function euler002(limit)
|
||||||
|
prevFib = 1
|
||||||
|
fib = 1
|
||||||
|
fibSum = 0
|
||||||
|
|
||||||
|
while fib < limit
|
||||||
|
if fib % 2 == 0
|
||||||
|
fibSum += fib
|
||||||
|
end
|
||||||
|
|
||||||
|
nextFib = prevFib + fib
|
||||||
|
prevFib = fib
|
||||||
|
fib = nextFib
|
||||||
|
end
|
||||||
|
|
||||||
|
return fibSum
|
||||||
|
end
|
||||||
|
|
||||||
|
euler002(1)
|
||||||
|
|
||||||
|
@time euler002(4*10^6)
|
41
3/euler003.jl
Executable file
41
3/euler003.jl
Executable file
|
@ -0,0 +1,41 @@
|
||||||
|
#!/usr/bin/julia
|
||||||
|
|
||||||
|
function isPrime(number)
|
||||||
|
if number in [2,3, 5]
|
||||||
|
return true
|
||||||
|
elseif number % 2 == 0
|
||||||
|
return false
|
||||||
|
end
|
||||||
|
|
||||||
|
for i ∈ range(3, 2, floor(Int64, √number))
|
||||||
|
if number % i == 0
|
||||||
|
return false
|
||||||
|
end
|
||||||
|
end
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
|
||||||
|
function findDivisors(number)
|
||||||
|
divisors = Set{Int64}(1)
|
||||||
|
LIMIT = trunc(√number)
|
||||||
|
for num ∈ 2:LIMIT
|
||||||
|
if number % num == 0
|
||||||
|
push!(divisors, num)
|
||||||
|
continue
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
union!(divisors, map(x -> div(number, x), divisors))
|
||||||
|
return divisors
|
||||||
|
end
|
||||||
|
|
||||||
|
function euler003(number)
|
||||||
|
divisors = findDivisors(number)
|
||||||
|
primeFactors = filter(isPrime, divisors)
|
||||||
|
println("$(number) -> $(maximum(primeFactors))")
|
||||||
|
end
|
||||||
|
|
||||||
|
# trigger compilation
|
||||||
|
euler003(3)
|
||||||
|
# now solve the actual task
|
||||||
|
@time euler003(600851475143)
|
38
5/euler005.jl
Normal file
38
5/euler005.jl
Normal file
|
@ -0,0 +1,38 @@
|
||||||
|
#!/usr/bin/julia
|
||||||
|
|
||||||
|
function isPrime(number::UInt64)
|
||||||
|
if number in [2,3,5]
|
||||||
|
return true
|
||||||
|
elseif number % 2 == 0
|
||||||
|
return false
|
||||||
|
end
|
||||||
|
|
||||||
|
for i ∈ range(3, 2, floor(UInt64, √number))
|
||||||
|
if number % i == 0
|
||||||
|
return false
|
||||||
|
end
|
||||||
|
end
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
|
||||||
|
function generatePrimeList(number::UInt64)
|
||||||
|
primeList = Array{UInt64,1}([2])
|
||||||
|
limit = div(number-1, 2)
|
||||||
|
|
||||||
|
for i ∈ range(3, 2, limit)
|
||||||
|
if isPrime(i)
|
||||||
|
push!(primeList, i)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
primeList
|
||||||
|
end
|
||||||
|
|
||||||
|
function euler005(number::UInt64)
|
||||||
|
primeList = generatePrimeList(number)
|
||||||
|
exponents = floor.(UInt64, log.(primeList, number))
|
||||||
|
prod(primeList .^ exponents)
|
||||||
|
end
|
||||||
|
|
||||||
|
euler005(1)
|
||||||
|
@time euler005(20)
|
Reference in a new issue