|

楼主 |
发表于 2020-8-13 12:27
|
显示全部楼层
本帖最后由 ysr 于 2020-8-13 04:34 编辑
如下是求多项式输出连续素数的结果,可能程序有问题呢,不知道哪里有问题了?
40与41之间有40个连续素数:
/41/43/47/53/61/71/83/97/113/131/151/173/197/223/251/281/313/347/383/421/461/503/547/593/641/691/743/797/853/911/971/1033/1097/1163/1231/1301/1373/1447/1523/1601。
1与17之间有16个连续素数:
3
5
7
9
11
13
15
/3/5/11/7/11/17/29/11/17/13/17/23/31/41/53/67/83/101/127/19/23/29/37/47/59/73/89/107/127/149/173/199/227/257
如下是程序代码(仅发主程序):
Private Sub Command1_Click()
Dim a, b
a = Val(Text1)
a1 = a
q = Val(Text2)
m = Sqr(q)
If Right(a, 1) Mod 2 = 0 Then
a = a + 1
Else
a = a
End If
Do While InStr(fenjieyinzi0(Val(a)), "*") <> 0
a = a + 2
Loop
Do While a <= q
b = a + s2
d = fenjieyinzi0(Val(b))
s = 0
Do While s < 40 And InStr(d, "*") = 0
s3 = s3 & "/" & b
s = s + 1
s2 = s * (s + 1)
b = a + s2
d = fenjieyinzi0(Val(b))
Loop
If s > 10 Then
Text3 = Text3 & s3 & vbCrLf
Else
Text3 = Text3 & a & vbCrLf
End If
a = a + 2
Loop
Combo1 = a1 & "与" & q & "之间有" & s & "个连续素数:" & vbCrLf & Text3
End Sub
Private Sub Command2_Click()
Text1 = ""
Text2 = ""
Text3 = ""
Combo1 = ""
Form1.Cls
End Sub
Private Function fenjieyinzi0(n As String) As String
If Len(n) < 10 Then
fenjieyinzi0 = fenjieyinzi(Trim(n))
Else
Dim a
n = Trim(n)
n1 = MPC(Trim(n), 1)
a = 123
'a为明文
a1 = zzxc(Trim(n), Trim(a))
If Val(a1) > 1 Then
fenjieyinzi0 = a1 & "*"
Else
c = 999
'c为公约
Do While zzxc(Trim(n1), Trim(c)) > 1
c = Val(c - 1)
Loop
d = qniyuan(Trim(c), Trim(n1))
'd为逆元为私钥
a2 = qksmimo(Trim(a), Trim(c), Trim(n))
'a2为密文
a3 = qksmimo(Trim(a2), Trim(d), Trim(n))
If MBJC(Trim(a3), Trim(a)) = 0 Then
fenjieyinzi0 = "这是素数有" & Len(n) & "位"
Else
fenjieyinzi0 = "2*2"
End If
End If
End If
End Function
Private Function fenjieyinzi1(a As String) As String
If Len(a) < 6 Then
fenjieyinzi1 = fenjieyinzi(Trim(a))
Else
x = 3
Do While InStr(MCC(Trim(a), 2), "/") = 0 And MBJC(Trim(a), 4) >= 0
If b = 0 Then
fenjieyinzi1 = fenjieyinzi1 & "2"
b = 1
Else
fenjieyinzi1 = fenjieyinzi1 & "*2"
End If
a = MCC(Trim(a), 2)
k = a
Loop
Do While MBJC(Trim(a), "0001") > 0
Do While MBJC(Trim(x), zhengchuqy(MBBC(Trim(a)))) <= 0
Do While InStr(MCC1(Trim(a), Trim(x)), "/") = 0 And MBJC(Trim(a), MbC(Trim(x), Trim(x))) >= 0
If b = 0 Then
fenjieyinzi1 = fenjieyinzi1 & x
b = 1
Else
fenjieyinzi1 = fenjieyinzi1 & "*" & x
End If
a = MCC1(Trim(a), Trim(x))
Loop
x = MPC1(Trim(x), 2)
Loop
k = a
a = 1
Loop
If b = 1 Then
fenjieyinzi1 = fenjieyinzi1 & "*" & k
Else
fenjieyinzi1 = "这是一个质数"
End If
End If
End Function
Private Function fenjieyinzi(sa As String) As String
Dim x, a, b
x = sa
b = Int((Sqr(Val(x)) + 1) / 2)
If x = 3 Or x = 2 Then
a = True
ElseIf x = 1 Then
a = False
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
Public Function DeleteSpace1(Tmp As String) As String
'删掉字符串中的换行符和空格的程序
Dim a As String, b As String
Dim i As Long, j As Long, k As Long
a = Tmp
b = ""
k = Len(a)
For i = 1 To k
j = Asc(Mid(a, i))
If j <> 10 And j <> 13 And j <> 32 And j <> Asc(" ") Then '最后一个百条件是全角空格
b = b & Chr(j)
End If
Next
DeleteSpace1 = b
End Function |
|