387 Harshad Numbers.sf 792 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. #!/usr/bin/ruby
  2. # Daniel "Trizen" Șuteu
  3. # Date: 20 February 2017
  4. # License: GPLv3
  5. # https://github.com/trizen
  6. # https://projecteuler.net/problem=387
  7. # Runtime: 1.880s (previously: 2.355s)
  8. var valid = []
  9. var limit = 1e14
  10. func recurse(num, sum) {
  11. if ((100*num + 1) >= limit) {
  12. return nil
  13. }
  14. for n in (0 .. 9) {
  15. var x = (10*num + n)
  16. var y = ( sum + n)
  17. if (y.divides(x)) {
  18. for i in ([1, 3, 7, 9]) {
  19. var p = (10*x + i)
  20. if (p < limit &&
  21. is_prime(p) &&
  22. is_prime(x / y)
  23. ) {
  24. valid << p
  25. }
  26. }
  27. recurse(x, y)
  28. }
  29. }
  30. }
  31. for i in ([1,2,4,6,8]) {
  32. recurse(i, i)
  33. }
  34. say valid.sum