|
回复 1楼 northwolves 的帖子
为了答题,恶补了初等数论相关的知识,楼主出的题可真不是一般的难。
做了一个自定义函数,=getxy(61)和=getxy(73)可解。
- Function getxy(d As Integer) As String
- Application.Volatile False
- Dim p(0 To 999) As Integer, q(0 To 999) As Integer, a(0 To 999) As Integer, i%, j%, k%, x As Double, y As Double, z As Double
- p(0) = 0
- q(0) = 1
- a(0) = Int(d ^ 0.5)
- If a(0) ^ 2 = d Then
- getxy = "无解" 'd为完全平方数时无解
- Else
- Do
- i = i + 1
- p(i) = a(i - 1) * q(i - 1) - p(i - 1)
- q(i) = (d - p(i) ^ 2) / q(i - 1)
- a(i) = Int((a(0) + p(i)) / q(i)) '计算√d的连分数
- Loop While a(i) <> 2 * a(0)
-
- If i Mod 2 = 1 Then '如果循环节是奇数的话,扩充连分数数组到第二个循环节
- For j = 1 To i
- a(i + j) = a(j)
- Next
- i = i * 2
- End If
-
- x = 1
- y = a(i - 1)
- For k = i - 2 To 1 Step -1 '根据连分数推算对应的渐近分数
- z = x
- x = y
- y = a(k) * y + z
- Next
- x = a(0) * y + x
- getxy = "(" & x & "," & y & ")"
- End If
- End Function
复制代码
[ 本帖最后由 sunya_0529 于 2011-7-30 03:06 编辑 ] |
|