|  | 
 
 
 楼主|
发表于 2024-1-16 17:33
|
显示全部楼层 
| Private Sub Command1_Click() '验证李明波幂和猜想的程序
 Dim a, b
 a = Val(Text1)
 b = Val(Text2)
 a1 = a
 Do While a <= b
 q = a ^ (1 / 2)
 a2 = 2
 Do While InStr(Log(a) / Log(a2), ".") > 0 And a2 < q
 a2 = a2 + 1
 Loop
 
 r = Log(a) / Log(a2)
 a3 = a - Int(q) ^ 2
 If InStr(r, ".") = 0 Then
 Text3 = Text3 & a & "=" & a2 & "^" & r & vbCrLf
 ElseIf a3 = 1 Then
 Text3 = Text3 & a & "=" & Int(q) & "^" & 2 & "+1" & vbCrLf
 ElseIf a3 = 2 Then
 Text3 = Text3 & a & "=" & Int(q) & "^" & 2 & "+1+1" & vbCrLf
 Else
 q1 = Sqr(Val(a3))
 a2 = 2
 Do While InStr(Log(a3) / Log(a2), ".") > 0 And a2 < q1
 a2 = a2 + 1
 Loop
 r1 = Log(a3) / Log(a2)
 a4 = a - Int(q) ^ 2 - Int(q1) ^ 2
 If InStr(r1, ".") = 0 Then
 Text3 = Text3 & a & "=" & Int(q) & "^2" & "+" & a2 & "^" & r1 & vbCrLf
 ElseIf a4 = 1 Then
 Text3 = Text3 & a & "=" & Int(q) & "^2" & "+" & Int(q1) & "^" & 2 & "+1" & vbCrLf
 Else
 q2 = Sqr(Val(a4))
 a2 = 2
 Do While InStr(Log(a4) / Log(a2), ".") > 0 And a2 < q2
 a2 = a2 + 1
 Loop
 r2 = Log(a4) / Log(a2)
 If a4 = 2 Then
 js = ksm6(Trim(a), Val(s))
 If InStr(js, "+") = 0 Then
 s = s + 1
 Text3 = Text3 & a & "=无解" & vbCrLf
 Else
 Text3 = Text3 & js & vbCrLf
 End If
 ElseIf InStr(r2, ".") = 0 Then
 Text3 = Text3 & a & "=" & Int(q) & "^2" & "+" & Int(q1) & "^2+" & a2 & "^" & r2 & vbCrLf
 
 Else
 
 js = ksm6(Trim(a), Val(s))
 If InStr(js, "+") = 0 Then
 a4 = a - 1
 a2 = 2
 Do While InStr(Log(a4) / Log(a2), ".") > 0 And a2 < q
 a2 = a2 + 1
 Loop
 r1 = Log(a4) / Log(a2)
 If InStr(r1, ".") = 0 Then
 Text3 = Text3 & a & "=" & "1+" & a2 & "^" & r1 & vbCrLf
 Else
 a5 = a - 2
 a2 = 2
 Do While InStr(Log(a5) / Log(a2), ".") > 0 And a2 < q
 a2 = a2 + 1
 Loop
 r2 = Log(a5) / Log(a2)
 If InStr(r2, ".") = 0 Then
 Text3 = Text3 & a & "=" & "1+1+" & a2 & "^" & r2 & vbCrLf
 Else
 ja1 = 2
 jc = ksm5(Trim(a), Trim(q))
 If InStr(jc, "无解") > 0 Then
 js1 = 1
 ja = 3
 Do While js1 < a ^ (1 / ja)
 
 Do While ja < a ^ (1 / ja)
 ax = Abs(a - js1 ^ ja)
 js2 = js1 & "^" & ja
 jss = ksm7(Val(ax), Trim(js2))
 If InStr(jss, "无解") = 0 Then
 s1 = s1 + 1
 jss1 = jss1 & a & "=" & jss & vbclf
 Else
 jss1 = jss1 & vbCrLf
 End If
 
 ja = ja + 1
 Loop
 
 
 js1 = js1 + 1
 Loop
 If s1 > 0 Then
 Text3 = Text3 & jss1 & vbCrLf
 Else
 s = s + 1
 Text3 = Text3 & a & "=无解" & vbCrLf
 End If
 Else
 Text3 = Text3 & jc & vbCrLf
 End If
 
 End If
 End If
 Else
 Text3 = Text3 & js & vbCrLf
 End If
 End If
 End If
 End If
 a = a + 1
 Loop
 
 Combo1 = a1 & "~" & b & "之间,有" & Val(s) & "个无解:" & vbCrLf & Text3
 
 
 End Sub
 
 Private Sub Command2_Click()
 Text1 = ""
 Text2 = ""
 Text3 = ""
 Combo1 = ""
 
 End Sub
 Private Function ksm6(sa As String, sb As String) As String '某数的快速幂程序
 Dim a, b
 a = Val(sa)
 s = Val(sb)
 a1 = a
 ja = 2
 b = Int(Log(a) / Log(3))
 Do Until ja > b
 a3 = a - 3 ^ ja
 
 If a3 = 1 Then
 ksm = a & "=" & 3 & "^" & ja & "+1" & "  "
 ElseIf a3 = 2 Then
 ksm = a & "=" & 3 & "^" & ja & "+1+1" & "  "
 Else
 q1 = Sqr(Val(a3))
 a2 = 2
 Do While InStr(Log(a3) / Log(a2), ".") > 0 And a2 < q1
 a2 = a2 + 1
 Loop
 r1 = Log(a3) / Log(a2)
 a5 = a2
 a4 = a3 - Int(Sqr(a3)) ^ 2
 If a4 = 1 Then
 ksm = a & "=3^" & ja & "+" & a2 & "^" & Int(r1) & "+1" & "  "
 ElseIf InStr(r1, ".") = 0 Then
 ksm = a & "=3^" & ja & "+" & a2 & "^" & r1 & "  "
 
 Else
 q2 = Sqr(Val(a4))
 a2 = 2
 Do While InStr(Log(a4) / Log(a2), ".") > 0 And a2 < q2
 a2 = a2 + 1
 Loop
 r2 = Log(a4) / Log(a2)
 If Val(r2) = 1 Then
 ksm = ksm
 ElseIf InStr(r2, ".") = 0 Then
 ksm = a & "=3^" & ja & "+" & Int(Sqr(a3)) & "^" & 2 & "+" & a2 & "^" & r2 & "  "
 Else
 
 s = s + 1
 ksm = a & "=无解" & vbCrLf
 End If
 End If
 End If
 
 If InStr(ksm, "+") > 0 Then
 ksm6 = ksm6 & ksm
 Else
 ksm6 = 无解
 End If
 ja = ja + 1
 Loop
 
 End Function
 
 
 Private Function ksm7(sa As String, sb As String) As String '某数的快速幂程序
 Dim a, q
 a = Val(sa)
 qr = Trim(sb)
 a2 = 2
 Do While InStr(Log(a) / Log(a2), ".") > 0 And a2 < a ^ (1 / 2)
 a2 = a2 + 1
 Loop
 r1 = Log(a) / Log(a2)
 a4 = a - a2 ^ Int(r1)
 If InStr(r1, ".") = 0 Then
 s1 = s1 + 1
 jss = jss & qr & "+" & a2 & "^" & r1 & vbCrLf
 ElseIf a4 = 1 Then
 jss = jss & qr & "+" & a2 & "^" & Int(r1) & "+1" & vbCrLf
 Else
 js1 = 1
 ja = 3
 Do While js1 < a ^ (1 / ja)
 
 Do While ja < a ^ (1 / ja)
 a1 = Abs(a - js1 ^ ja)
 
 If InStr(fenjieyinzi(Val(ja)), "*") = 0 Then
 a2 = 2
 Do While InStr(Log(a1) / Log(a2), ".") > 0 And a2 < a1 ^ (1 / 2)
 a2 = a2 + 1
 Loop
 r = Log(a1) / Log(a2)
 If Val(r) = 0 Then
 jss = jss & qr & "+" & js1 & "^" & ja & "+" & "1 " & vbclf
 s1 = s1 + 1
 ElseIf InStr(r, ".") = 0 Then
 s1 = s1 + 1
 jss = jss & qr & "+" & js1 & "^" & ja & "+" & a2 & "^" & r & vbclf
 Else
 jss1 = "无解" & vbCrLf
 End If
 
 Else
 jss = jss & vbCrLf
 
 End If
 ja = ja + 1
 Loop
 
 
 js1 = js1 + 1
 Loop
 End If
 If s1 > 0 Then
 ksm7 = jss & vbCrLf
 Else
 ksm7 = ksm7 & a & "=无解" & vbCrLf
 End If
 End Function
 
 Private Function paixu1(a As String) As String
 Dim i As Integer
 Dim ak(), s105, cr(), f
 s103 = a
 Set f = CreateObject("Scripting.Dictionary")
 s105 = Split(s103, "/")
 j1 = UBound(s105)
 Print j1
 For k = 1 To j1
 n1 = n1 + 1
 ReDim Preserve ak(1 To n1)
 ak(n1) = s105(n1)
 Next
 Print ak(1)
 
 For k = 1 To j1
 
 ReDim Preserve cr(1 To k)
 m = Val(ak(k))
 f(m) = ""
 Next
 
 n = 0
 m = f.Keys
 For i = 0 To f.Count - 1
 ReDim Preserve cr(1 To i + 1)
 cr(i + 1) = m(i)
 Next
 For i = 1 To UBound(cr) - 1
 For j = i + 1 To UBound(cr)
 If cr(i) > cr(j) Then
 temp = cr(j)
 cr(j) = cr(i)
 cr(i) = temp  'c数组是排序好的
 End If
 Next j
 
 ' If i Mod 20 = 0 Then
 ' s104 = s104 & temp & "/" & vbCrLf
 ' Else
 ' s104 = s104 & temp & "/"
 ' End If
 Next i
 
 For i = 1 To UBound(cr)
 If i Mod 20 = 0 Then
 s104 = s104 & cr(i) & "/" & vbCrLf
 Else
 s104 = s104 & cr(i) & "/"
 End If
 Next
 Print temp
 MsgBox "ok"
 MsgBox s104  '显示数组
 paixu1 = s104
 End Function
 
 Private Function ksm5(sa As String, sb As String) As String '某数的快速幂程序
 Dim a, q
 a = Val(sa)
 q = Val(sb)
 ja1 = 2
 Do While ja1 < q
 For i = ja1 To Int(q) Step 1
 If InStr(ksm4(Trim(a), Val(i)), "+") = 0 Then
 ah = False
 Exit For
 
 Else: ah = True
 js = ksm4(Trim(a), Val(i))
 End If
 Next
 
 If ah = True Then
 s = s + 1
 m5 = m5 & a & "=无解" & vbCrLf
 Else
 If InStr(js, "+") = 0 Then
 m5 = m5
 Else
 s1 = s1 + 1
 m5 = m5 & js & vbCrLf
 End If
 End If
 ja1 = ja1 + 1
 Loop
 
 If s1 > 0 Then
 ksm5 = m5
 Else
 ksm5 = ksm5 & a & "=无解" & vbCrLf
 End If
 End Function
 Private Function ksm4(sa As String, sb As String) As String '某数的快速幂程序
 Dim a, b
 a = Val(sa)
 ja1 = Val(sb)
 a1 = a
 ja = 2
 b = Int(Log(a) / Log(ja1))
 Do Until ja > b
 a3 = a - ja1 ^ ja
 
 If a3 = 1 Then
 ksm = a & "=" & ja1 & "^" & ja & "+1" & "  "
 ElseIf a3 = 2 Then
 ksm = a & "=" & ja1 & "^" & ja & "+1+1" & "  "
 Else
 q1 = Sqr(Val(a3))
 a2 = 2
 Do While InStr(Log(a3) / Log(a2), ".") > 0 And a2 < q1
 a2 = a2 + 1
 Loop
 r1 = Log(a3) / Log(a2)
 a5 = a2
 a4 = a3 - Int(Sqr(a3)) ^ 2
 If a4 = 1 Then
 ksm = a & "=" & ja1 & "^" & ja & "+" & Int(Sqr(a3)) & "^" & 2 & "+1" & "  "
 ElseIf InStr(r1, ".") = 0 Then
 ksm = a & "=" & ja1 & "^" & ja & "+" & a2 & "^" & r1 & "  "
 
 Else
 q2 = Sqr(Val(a4))
 a2 = 2
 Do While InStr(Log(a4) / Log(a2), ".") > 0 And a2 < q2
 a2 = a2 + 1
 Loop
 r2 = Log(a4) / Log(a2)
 If InStr(r2, ".") = 0 And r2 <> 1 Then
 ksm = a & "=" & ja1 & "^" & ja & "+" & Int(Sqr(a3)) & "^" & 2 & "+" & a2 & "^" & r2 & "  "
 Else
 
 s = s + 1
 ksm = a & "=无解"
 End If
 End If
 End If
 
 If InStr(ksm, "无解") > 0 Then
 ksm4 = 无解
 Else
 ksm4 = ksm4 & ksm
 End If
 ja = ja + 1
 Loop
 
 End Function
 
 Private Function fenjieyinzi(sa As String) As String
 Dim X, a, b, k As String
 a = Val(sa)
 
 X = 3
 If a <= 1 Or a > Int(a) Then
 If a = 1 Then
 fenjieyinzi = "它既不是质数,也不是合数"
 
 Else
 MsgBox "error"
 End If
 
 Else
 
 Do While a / 2 = Int(a / 2) And a >= 4
 
 If b = 0 Then
 fenjieyinzi = fenjieyinzi & "2"
 b = 1
 Else
 fenjieyinzi = fenjieyinzi & "*2"
 End If
 a = a / 2
 k = a
 
 Loop
 
 Do While a > 1
 Do While X <= Sqr(a)
 Do While a / X = Int(a / X) And a >= X * X
 
 If b = 0 Then
 fenjieyinzi = fenjieyinzi & X
 b = 1
 Else
 fenjieyinzi = fenjieyinzi & "*" & X
 End If
 a = a / X
 Loop
 
 X = X + 2
 Loop
 
 k = a
 a = 1
 Loop
 
 If b = 1 Then
 fenjieyinzi = fenjieyinzi & "*" & k
 Else
 fenjieyinzi = "这是一个质数"
 End If
 
 
 
 
 
 End If
 
 End Function
 
 
 Private Function paixu11(a3 As String, q As String) As String
 a2 = Val(2)
 Do While InStr(Val(Log(a3) / Log(a2)), ".") > 0 And a2 <= Val(q)
 a2 = Val(a2) + 1
 Loop
 
 r = Log(a3) / Log(a2)
 paixu11 = a2 & "^" & r
 End Function
 
 
 Private Function paixu(a As String) As String
 Dim i As Integer
 Dim ak(), s105, cr(), f
 s103 = a
 Set f = CreateObject("Scripting.Dictionary")
 s105 = Split(s103, "/")
 j1 = UBound(s105)
 Print j1
 j2 = Val(j1)
 For k = 1 To j1
 n1 = n1 + 1
 ReDim Preserve ak(1 To n1)
 ak(n1) = s105(n1)
 Next
 Print ak(1)
 n = 0
 For k = 1 To j1
 For i = 1 To j1
 n = n + 1
 ReDim Preserve cr(1 To n)
 m = Val(ak(k)) + Val(ak(i))
 f(m) = ""
 Next
 Next
 n = 0
 
 m = f.Keys
 For i = 0 To j2
 ReDim Preserve cr(1 To i + 1)
 cr(i + 1) = m(i)
 Next
 For i = 1 To UBound(cr) - 1
 For j = i + 1 To UBound(cr)
 If cr(i) > cr(j) Then
 temp = cr(j)
 cr(j) = cr(i)
 cr(i) = temp  'c数组是排序好的
 End If
 Next j
 
 ' If i Mod 20 = 0 Then
 ' s104 = s104 & temp & "/" & vbCrLf
 ' Else
 ' s104 = s104 & temp & "/"
 ' End If
 Next i
 
 For i = 1 To UBound(cr)
 If i Mod 20 = 0 Then
 s104 = s104 & cr(i) & "/" & vbCrLf
 Else
 s104 = s104 & cr(i) & "/"
 End If
 Next
 Print temp
 MsgBox "ok"
 MsgBox s104  '显示数组
 paixu = s104
 End Function
 
 | 
 |