方案 - 拉格朗日的四方定理

时间:2016-11-13 19:42:58

标签: math lambda functional-programming scheme

我尝试实现一个函数来计算拉格朗日的四方定理,其方程中的自然数为n。但是我不知道那样做...有人可以给我一个例子/代码吗?

例如,a ^ 2 + b ^ 2 + c ^ 2 + d ^ 2 = n,其中n是函数的输入。

1 个答案:

答案 0 :(得分:2)

您可以使用两个功能(主要和辅助)来完成此操作:

如果n是自然的,(lagrange n)给出所有四元组(a,b,c,d)的列表,例如^ 2 + b ^ 2 + c ^ 2 + d ^ 2 = n。

(define lagrange
  (lambda (n)
    (lagrange-aux 4 0 n)))

(define lagrange-aux
  (lambda (size m sum)
    (cond ((and (zero? size) (zero? sum)) '(()))
          ((or (zero? size) (> (* m m) sum)) '())
          (else (append (map (lambda (x) (cons m x))
                             (lagrange-aux (- size 1) 0 (- sum (* m m))))
                        (lagrange-aux size (+ m 1) sum))))))

示例:

(lagrange 13) ==>
((0 0 2 3) (0 0 3 2) (0 2 0 3) (0 2 3 0) (0 3 0 2) (0 3 2 0)
 (1 2 2 2) (2 0 0 3) (2 0 3 0) (2 1 2 2) (2 2 1 2) (2 2 2 1)
 (2 3 0 0) (3 0 0 2) (3 0 2 0) (3 2 0 0))