From fa482c9809c57cadae9057929db49f007f3b5e65 Mon Sep 17 00:00:00 2001 From: ikselven Date: Tue, 11 Jul 2017 21:52:05 +0200 Subject: [PATCH] julia implementation for problems 2, 3 and 5 --- 2/euler002.jl | 23 +++++++++++++++++++++++ 3/euler003.jl | 41 +++++++++++++++++++++++++++++++++++++++++ 5/euler005.jl | 38 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 102 insertions(+) create mode 100755 2/euler002.jl create mode 100755 3/euler003.jl create mode 100644 5/euler005.jl diff --git a/2/euler002.jl b/2/euler002.jl new file mode 100755 index 0000000..2afefbf --- /dev/null +++ b/2/euler002.jl @@ -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) diff --git a/3/euler003.jl b/3/euler003.jl new file mode 100755 index 0000000..76be093 --- /dev/null +++ b/3/euler003.jl @@ -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) diff --git a/5/euler005.jl b/5/euler005.jl new file mode 100644 index 0000000..94f2e21 --- /dev/null +++ b/5/euler005.jl @@ -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)