443 GCD sequence.sf 815 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. #!/usr/bin/ruby
  2. # Author: Trizen
  3. # Date: 03 September 2019
  4. # Translated: 16 November 2023
  5. # https://github.com/trizen
  6. # https://projecteuler.net/problem=443
  7. # Runtime: 1 minute, 28 seconds
  8. func GCD_sequence (upto) {
  9. var sum = 13
  10. for (var n = 5; n <= upto; ++n) {
  11. if (n >= 100 && !n.is_coprime(sum)) {
  12. var k = (n + (n - 1))
  13. sum += gcd(n, sum)
  14. if (k.is_prime) {
  15. if (k >= upto) {
  16. sum += (upto - n)
  17. break
  18. }
  19. sum += (k - (n - 1))
  20. n = k
  21. }
  22. }
  23. else {
  24. sum += gcd(n, sum)
  25. }
  26. }
  27. return sum
  28. }
  29. assert_eq(GCD_sequence(1000), 2524)
  30. assert_eq(GCD_sequence(1000000), 2624152)
  31. say GCD_sequence(1000000000000000)