|

楼主 |
发表于 2025-5-22 23:06
|
显示全部楼层
Private Function fenjieyinzi(sa As String) As String
Dim x, a, b
x = sa
b = Int(Sqr(Val(x)) / 2)
If x = 3 Or x = 2 Then
a = True
Else
If x Mod 2 = 0 Then
a = False
Else
For I = 3 To 2 * b + 1 Step 2
If x Mod I = 0 Then
a = False
Exit For
Else: a = True
End If
Next
End If
End If
If a = True Then
fenjieyinzi = "这是个素数"
Else
fenjieyinzi = "2*2"
End If
End Function
Private Function fenjieyinzi0(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
fenjieyinzi0 = "它既不是质数,也不是合数"
Else
MsgBox "error"
End If
Else
Do While a / 2 = Int(a / 2) And a >= 4
If b = 0 Then
fenjieyinzi0 = fenjieyinzi0 & "2"
b = 1
Else
fenjieyinzi0 = fenjieyinzi0 & "*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
fenjieyinzi0 = fenjieyinzi0 & x
b = 1
Else
fenjieyinzi0 = fenjieyinzi0 & "*" & x
End If
a = a / x
Loop
x = x + 2
Loop
k = a
a = 1
Loop
If b = 1 Then
fenjieyinzi0 = fenjieyinzi0 & "*" & k
Else
fenjieyinzi0 = "这是一个质数"
End If
End If
End Function
Private Sub Command1_Click()
Dim x, p
x = Val(Text1)
X1 = Val(Text2)
X2 = x
Do While x <= X1
p = fenjieyinzi(Val(x))
If InStr(Trim(p), "*") = 0 Then
p1 = x - 1: p2 = x + 1: p3 = fenjieyinzi0(Val(p1)): p4 = fenjieyinzi0(Val(p2))
If p1 Mod 4 = 0 And p1 Mod 6 <> 0 And p2 Mod 10 <> 0 And p2 Mod 4 <> 0 Then
s = s + 1
t = t & x & " s=" & s
t = t & " p1=" & p3 & " p2=" & p4 & vbCrLf
Else
s = s
End If
Else
x = x
End If
x = x + 2
Loop
If s > 0 Then
Text3 = "在" & X2 & " 与 " & X1 & " 之间可能的梅森指数p有 " & s & " 个:" & vbCrLf & t
Else
Text3 = "wu jie"
End If
End Sub
Private Sub Command2_Click()
Text1 = ""
Text2 = ""
Text3 = ""
End Sub
|
|