Created
August 21, 2023 09:03
-
-
Save philipp-classen/318c870eb848b84548448eb4b80eed55 to your computer and use it in GitHub Desktop.
Find prime triples whose sum approximates the given value
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Given a sum, it returns prime numbers that approximately add up to the sum. | |
# Example: 100 -> [29, 31, 37] (sums to 97) | |
require 'prime' | |
def find_prime_triple(target) | |
return [2, 3, 5] if target <= 4 | |
middle_prime = nil | |
i = 0 | |
while !middle_prime do | |
if Prime.prime?(target + i) | |
middle_prime = target + i | |
elsif Prime.prime?(target - i) | |
middle_prime = target - i | |
else | |
i += 1 | |
end | |
end | |
i = 2 | |
while !Prime.prime?(middle_prime - i) do | |
i += 2 | |
end | |
left_prime = middle_prime - i | |
i = 2 | |
while !Prime.prime?(middle_prime + i) do | |
i += 2 | |
end | |
right_prime = middle_prime + i | |
return [left_prime, middle_prime, right_prime] | |
end | |
size = ARGV[0].to_i | |
if size > 0 | |
puts find_prime_triple(size / 3) | |
else | |
puts "Usage: ruby find-prime-triple.rb SUM" | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment