|
发表于 2014-12-3 12:09
|
显示全部楼层
本楼为最佳答案
本帖最后由 香川群子 于 2014-12-3 12:15 编辑
用下面这个程序代码可以得到很多、很多解:
'要求例子:
(1579-k1)^2 + (5803-k2)^2 + (1137-k3)^2 = 217502634
或:
(x1)^2 + (x2)^2 + (x3)^2 = 217502634
- Sub test()
- Dim ar&(1 To 65530, 1 To 3), a1&, a2&, a3&, s&, x1&, x2&, x3&, k&, tms#
- tms = Timer
-
- a1 = Range("a2"): a2 = Range("b2"): a3 = Range("c2"): s = Range("d2") '从单元格读取参数
- a1 = 9342: a2 = 9462: a3 = 7007: s = 217502634 '或直接赋值
-
- For x1 = 0 To Int(Sqr(s))
- For x2 = 0 To Int(Sqr(s - x1 ^ 2))
- x3 = Int(Sqr(s - x1 ^ 2 - x2 ^ 2))
- If x1 ^ 2 + x2 ^ 2 + x3 ^ 2 = s Then
- k = k + 1: ar(k, 1) = x1: ar(k, 2) = x2: ar(k, 3) = x3
- If k > 0 Then GoTo Ext '如果只需一组解则马上停止
- End If
- Next
- Next
- Ext:
- MsgBox Format(Timer - tms, "0.000s ") & k
- If k Then Range("a5").CurrentRegion.Offset(1) = "": Range("a6").Resize(k, 3) = ar
- End Sub
复制代码 当参数要求为:a1 = 9342: a2 = 9462: a3 = 7007: s = 217502634 时,
得到第一组解为:
x1 = 4: x2 = 10057: x3 = 10787
即:
k1 = 9342±4: k2 = 9462±10057: k3 = 7007±10787 这样就可以算一下子得到2*2*2=8组解了。
|
|