fork(9) download
  1. ; euler's sum of products conjecture
  2.  
  3. (define (euler n) ; brute force
  4. (do ((e 5 (+ e 1))) ((= e n))
  5. (do ((d (- e 1) (- d 1))) ((zero? d))
  6. (do ((c (- d 1) (- c 1))) ((zero? c))
  7. (do ((b (- c 1) (- b 1))) ((zero? b))
  8. (do ((a (- b 1) (- a 1))) ((zero? a))
  9. (when (= (+ (expt a 5) (expt b 5)
  10. (expt c 5) (expt d 5))
  11. (expt e 5))
  12. (display a) (display "^5 + ")
  13. (display b) (display "^5 + ")
  14. (display c) (display "^5 + ")
  15. (display d) (display "^5 = ")
  16. (display e) (display "^5")
  17. (newline))))))))
  18. (euler 145)
  19.  
  20. (define (euler n) ; cache powers
  21. (let ((cache (make-vector n)))
  22. (do ((i 1 (+ i 1))) ((= i n))
  23. (vector-set! cache i (expt i 5)))
  24. (do ((e 5 (+ e 1))) ((= e n))
  25. (do ((d (- e 1) (- d 1))) ((zero? d))
  26. (do ((c (- d 1) (- c 1))) ((zero? c))
  27. (do ((b (- c 1) (- b 1))) ((zero? b))
  28. (do ((a (- b 1) (- a 1))) ((zero? a))
  29. (when (= (+ (vector-ref cache a)
  30. (vector-ref cache b)
  31. (vector-ref cache c)
  32. (vector-ref cache d))
  33. (vector-ref cache e))
  34. (display a) (display "^5 + ")
  35. (display b) (display "^5 + ")
  36. (display c) (display "^5 + ")
  37. (display d) (display "^5 = ")
  38. (display e) (display "^5")
  39. (newline)))))))))
  40. (euler 145)
  41.  
  42. (define (euler n) ; short-circuit loops
  43. (let ((cache (make-vector n)))
  44. (do ((i 1 (+ i 1))) ((= i n))
  45. (vector-set! cache i (expt i 5)))
  46. (do ((e 5 (+ e 1))) ((= e n))
  47. (list-of (list a b c d e)
  48. (d range (- e 1) 0)
  49. (c range (- d 1) 0)
  50. (c-sum is
  51. (+ (vector-ref cache c)
  52. (vector-ref cache d)))
  53. (< c-sum (vector-ref cache e))
  54. (b range (- c 1) 0)
  55. (b-sum is
  56. (+ c-sum
  57. (vector-ref cache b)))
  58. (< b-sum (vector-ref cache e))
  59. (a range (- b 1) 0)
  60. (= (+ b-sum (vector-ref cache a))
  61. (vector-ref cache e))
  62. (display a) (display "^5 + ")
  63. (display b) (display "^5 + ")
  64. (display c) (display "^5 + ")
  65. (display d) (display "^5 = ")
  66. (display e) (display "^5")
  67. (newline)))))
  68. (euler 145)
Time limit exceeded #stdin #stdout 15s 9832KB
stdin
Standard input is empty
stdout
Standard output is empty