050 Consecutive prime sum.sf 788 B

12345678910111213141516171819202122232425262728293031323334353637383940
  1. #!/usr/bin/ruby
  2. # Author: Daniel "Trizen" Șuteu
  3. # License: GPLv3
  4. # Website: 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: 1.345s
  8. define limit = 1e6
  9. var sum = 0
  10. var primes = []
  11. var p = 2
  12. loop {
  13. (sum += p)/1.2 > limit && break; # /1.2 is a lucky optimization?
  14. primes << p
  15. p.next_prime!
  16. }
  17. var l = primes.len
  18. var arr = []
  19. for (var i = 0; i <= l; ++i) {
  20. var sum = primes[i]
  21. for (var j = i+1; (j <= l-i) && ((sum += primes[j]) < limit); ++j) {
  22. if (sum.is_prime) {
  23. arr << [j-i + 1, sum, i, j]
  24. }
  25. }
  26. }
  27. var res = arr.max_by { .head }
  28. say "#{res[1]} is the sum of #{res[0]} starting with #{prime(res[2]+1)}"