050 Consecutive prime sum -- v2.sf 979 B

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. #!/usr/bin/ruby
  2. # Daniel "Trizen" Șuteu
  3. # Date: 25 July 2021
  4. # https://github.com/trizen
  5. # Which prime, below one-million, can be written as the sum of the most consecutive primes?
  6. # https://projecteuler.net/problem=50
  7. # Runtime: 0.227s
  8. func p50 (limit) {
  9. var prime_sum = [0]
  10. for (var p = 2; true ; p.next_prime!) {
  11. var sum = (prime_sum.tail + p)
  12. break if (sum >= limit)
  13. prime_sum << sum
  14. }
  15. var terms = 1
  16. var max_prime = 2
  17. var start_p_index = 1
  18. for i in (^prime_sum) {
  19. for (var j = prime_sum.end; j >= (i + terms); --j) {
  20. var n = (prime_sum[j] - prime_sum[i])
  21. if (((j-i > terms) or (n > max_prime)) and (n < limit) and n.is_prime) {
  22. (terms, max_prime, start_p_index) = (j-i, n, i+1)
  23. break
  24. }
  25. }
  26. }
  27. say "#{max_prime} is the sum of #{terms} consecutive primes with first prime = #{prime(start_p_index)}"
  28. }
  29. p50(1e6)