diff --git a/problem03.rb b/problem03.rb index e69de29..cd7ced5 100644 --- a/problem03.rb +++ b/problem03.rb @@ -0,0 +1,13 @@ +# Project Euler: What is the largest prime factor of the number 600851475143? + +def largest_prime_factor(number) + for i in (2...number) + if number % i == 0 + factor = number/i + return largest_prime_factor(factor) + end + end + return number +end + +puts "Largest Prime Factor: #{largest_prime_factor(600851475143)}" \ No newline at end of file diff --git a/problem05.rb b/problem05.rb index e69de29..52df21e 100644 --- a/problem05.rb +++ b/problem05.rb @@ -0,0 +1,34 @@ +# Project Euler: What is the smallest positive number that is evenly divisible by all of the numbers from 1 to 20? +def get_prime_factors(number) + primes = [] + for i in (2...number) + if number % i ==0 + while number % i == 0 + number = number / i + primes << i + end + end + end + primes = [1, number] if primes.empty? + return primes +end + +def least_common_multiple(number) + factors_to_frequency = Hash.new + for i in (1..number) + prime_factors = get_prime_factors(i) + for number in prime_factors + factors_to_frequency[number] ||= prime_factors.count(number) + factors_to_frequency[number] = prime_factors.count(number) if prime_factors.count(number) > factors_to_frequency[number] + end + end + + total = 1 + factors_to_frequency.each do |key, value| + total = total * key ** value + end + + return total +end + +puts "Least Common Multiple: #{least_common_multiple(20)}" \ No newline at end of file diff --git a/problem08.rb b/problem08.rb index e69de29..f9c63c8 100644 --- a/problem08.rb +++ b/problem08.rb @@ -0,0 +1,18 @@ +# Project Euler: Find the greatest product of five consecutive digits in the 1000-digit number. + +my_number = 7316717653133062491922511967442657474235534919493496983520312774506326239578318016984801869478851843858615607891129494954595017379583319528532088055111254069874715852386305071569329096329522744304355766896648950445244523161731856403098711121722383113622298934233803081353362766142828064444866452387493035890729629049156044077239071381051585930796086670172427121883998797908792274921901699720888093776657273330010533678812202354218097512545405947522435258490771167055601360483958644670632441572215539753697817977846174064955149290862569321978468622482839722413756570560574902614079729686524145351004748216637048440319989000889524345065854122758866688116427171479924442928230863465674813919123162824586178664583591245665294765456828489128831426076900422421902267105562632111110937054421750694165896040807198403850962455444362981230987879927244284909188845801561660979191338754992005240636899125607176060588611646710940507754100225698315520005593572972571636269561882670428252483600823257530420752963450 +chunk_size = 5 + +my_number = my_number.to_s +start_index = 0 +max_product = 0 +while (start_index < my_number.size) + chunk = my_number[start_index, chunk_size] + start_index += 1 + + product = chunk.split("").inject(1) { |total, n| total * n.to_i } + + max_product = product if product > max_product +end + +puts "Max Product: #{max_product}" \ No newline at end of file