|
4楼代码是有问题的。无法得到所有解。
对于3个整数的平方和 = 217502634 来说,应该有 21636*8组解。
请看附件:- Sub test()
- Dim ar&(1 To 65530, 1 To 3), a1&, a2&, a3&, s&, x1&, x2&, x3&, k&, l&, m&, cnt, tms#
- tms = Timer
-
- a1 = Range("a2"): a2 = Range("b2"): a3 = Range("c2"): s = Range("d2"): l = Range("e2")
- ' a1 = 9342: a2 = 9462: a3 = 7007: s = 217502634
- m = Int(Sqr(s))
- For x1 = 0 To Int(Sqr(s))
- For x2 = 0 To Int(Sqr(s - x1 ^ 2))
- cnt = cnt + 1: If cnt Mod 1000 = 0 Then Application.StatusBar = Format(Timer - tms, "0.000s ") & k & "/" & cnt & Format(x1 / m, " (0.0%) ")
- 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 = l Then GoTo Ext
- End If
- Next
- Next
- Ext:
- MsgBox Format(Timer - tms, "0.000s ") & k & "/" & cnt
- If k Then Range("a5").CurrentRegion.Offset(1) = "": Range("a6").Resize(k, 3) = ar
- End Sub
复制代码 |
|