我尝试实现一个函数来计算拉格朗日的四方定理,其方程中的自然数为n。但是我不知道那样做...有人可以给我一个例子/代码吗?
例如,a ^ 2 + b ^ 2 + c ^ 2 + d ^ 2 = n,其中n是函数的输入。
答案 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))