Skip to content

Instantly share code, notes, and snippets.

@philipp-classen
Created August 21, 2023 09:03
Show Gist options
  • Save philipp-classen/318c870eb848b84548448eb4b80eed55 to your computer and use it in GitHub Desktop.
Save philipp-classen/318c870eb848b84548448eb4b80eed55 to your computer and use it in GitHub Desktop.
Find prime triples whose sum approximates the given value
# 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