数学中国

 找回密码
 注册
搜索
热搜: 活动 交友 discuz
楼主: ysr

求数列的通项公式

[复制链接]
 楼主| 发表于 2026-4-13 22:35 | 显示全部楼层
5032239631与5032439631之间的素数开头最多有公差为6469693230的6个连续素数:用时2386.914秒
合0.66小时,这个程序最快,代码如下:

Private Sub Command1_Click()
Dim a, b
a = Val(Text1)
a1 = a
Q = Val(Text2)
r = Val(Text4)
t = Timer
m = Sqr(Q)
If Right(a, 1) Mod 2 = 0 Then
a = a + 1
Else
a = a
End If

Do While InStr(fenjieyinzi(Val(a)), "*") <> 0
a = a + 2
Loop

Do While a <= Q
b = a
d = fenjieyinzi(Val(b))
s = 0
s3 = ""
Do While s >= 0 And InStr(d, "*") = 0
s4 = s + 1
If s4 Mod 20 = 0 Then
s3 = s3 & "/" & b & vbCrLf
Else
s3 = s3 & "/" & b
End If
s = s + 1
s2 = s * (s + 1)
b = b + r
d = fenjieyinzi(Val(b))
Loop
If s >= 10 Then
Text3 = Text3 & s3 & vbCrLf
End If
If s > 1 Then
s5 = s5 & "/" & s
Else
s5 = s5
End If
Print s5
a = a + 2
s2 = 0
Loop
s6 = Mid(s5, 2)
     s7 = max(Trim(s6))
Combo1 = a1 & "与" & Q & "之间的素数开头最多有公差为" & r & "的" & s7 & "个连续素数:用时" & Timer - t & "秒 " & vbCrLf & Text3

     

End Sub

Private Sub Command2_Click()
Text1 = ""
Text2 = ""
Text3 = ""
Text4 = ""
Combo1 = ""
Form1.Cls
End Sub
Private Function max(ByVal lists As String) As String
Dim temp As Long
Dim a() As String
a = Split(lists, "/")
Dim b As Long

For b = 0 To UBound(a)
If temp < a(b) Then temp = a(b)
Next
max = temp
End Function

Private Function fenjieyinzi(sa As String) As String
Dim x, a, b
x = Val(sa)
b = Int(Sqr(Val(x)) / 2)
If x = 3 Or x = 2 Then
a = True
Else
If Val(x / 2) - Int(Val(x / 2)) = 0 Then
a = False
Else

For i = 3 To 2 * b + 1 Step 2
If Val(x / i) - Int(Val(x / 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
回复 支持 反对

使用道具 举报

 楼主| 发表于 2026-4-15 07:31 | 显示全部楼层
本帖最后由 ysr 于 2026-4-14 23:38 编辑

4047918759与4049918759之间的素数开头最多有公差为6469693230的8个连续素数:用时秒
Private Sub Command1_Click()
Dim a, b
a = Val(Text1)
a1 = a
Q = Val(Text2)
r = Val(Text4)
t = Timer
m = Sqr(Q)
If Right(a, 1) Mod 2 = 0 Then
a = a + 1
Else
a = a
End If

Do While InStr(fenjieyinzi(Val(a)), "*") <> 0
a = a + 2
Loop

Do While a <= Q
b = a
d = fenjieyinzi(Val(b))
s = 0
s3 = ""
Do While s >= 0 And InStr(d, "*") = 0
s4 = s + 1
If s4 Mod 20 = 0 Then
s3 = s3 & "/" & b & vbCrLf
Else
s3 = s3 & "/" & b
End If
s = s + 1
s2 = s * (s + 1)
b = b + r
d = fenjieyinzi(Val(b))
Loop
If s >= 10 Then
Text3 = Text3 & s3 & vbCrLf
End If
If s > 1 Then
s5 = s5 & "/" & s
Else
s5 = s5
End If
Print s5
a = a + 2
s2 = 0
Loop
s6 = Mid(s5, 2)
     s7 = max(Trim(s6))
Combo1 = a1 & "与" & Q & "之间的素数开头最多有公差为" & r & "的" & s7 & "个连续素数:用时" & Timer - t & "秒 " & vbCrLf & Text3   

End Sub

Private Sub Command2_Click()
Text1 = ""
Text2 = ""
Text3 = ""
Text4 = ""
Combo1 = ""
Form1.Cls
End Sub
Private Function max(ByVal lists As String) As String
Dim temp As Long
Dim a() As String
a = Split(lists, "/")
Dim b As Long

For b = 0 To UBound(a)
If temp < a(b) Then temp = a(b)
Next
max = temp
End Function

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 Val(x / 2) - Int(Val(x / 2)) = 0 Then
a = False
Else

For i = 3 To 2 * b + 1 Step 2
If Val(x / i) - Int(Val(x / 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
回复 支持 反对

使用道具 举报

 楼主| 发表于 2026-4-15 07:34 | 显示全部楼层
4050218759与4051718759之间的素数开头最多有公差为6469693230的9个连续素数:用时-21964.78秒
Private Sub Command1_Click()
Dim a, b
a = Val(Text1)
a1 = a
Q = Val(Text2)
r = Val(Text4)
t = Timer
m = Sqr(Q)
If Right(a, 1) Mod 2 = 0 Then
a = a + 1
Else
a = a
End If

Do While InStr(fenjieyinzi(Val(a)), "*") <> 0
a = a + 2
Loop

Do While a <= Q
b = a
d = fenjieyinzi(Val(b))
s = 0
s3 = ""
Do While s >= 0 And InStr(d, "*") = 0
s4 = s + 1
If s4 Mod 20 = 0 Then
s3 = s3 & "/" & b & vbCrLf
Else
s3 = s3 & "/" & b
End If
s = s + 1
s2 = s * (s + 1)
b = b + r
d = fenjieyinzi(Val(b))
Loop
If s >= 10 Then
Text3 = Text3 & s3 & vbCrLf
End If
If s > 1 Then
s5 = s5 & "/" & s
Else
s5 = s5
End If
Print s5
a = a + 2
s2 = 0
Loop
s6 = Mid(s5, 2)
     s7 = max(Trim(s6))
Combo1 = a1 & "与" & Q & "之间的素数开头最多有公差为" & r & "的" & s7 & "个连续素数:用时" & Timer - t & "秒 " & vbCrLf & Text3

     

End Sub

Private Sub Command2_Click()
Text1 = ""
Text2 = ""
Text3 = ""
Text4 = ""
Combo1 = ""
Form1.Cls
End Sub
Private Function max(ByVal lists As String) As String
Dim temp As Long
Dim a() As String
a = Split(lists, "/")
Dim b As Long

For b = 0 To UBound(a)
If temp < a(b) Then temp = a(b)
Next
max = temp
End Function

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 Val(x / 2) - Int(Val(x / 2)) = 0 Then
a = False
Else

For i = 3 To 2 * b + 1 Step 2
If Val(x / i) - Int(Val(x / 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
回复 支持 反对

使用道具 举报

 楼主| 发表于 2026-4-15 07:48 | 显示全部楼层
本帖最后由 ysr 于 2026-4-15 00:05 编辑

4055718759与4055818759之间的素数开头最多有公差为6469693230的7个连续素数:用时532.5586秒 ,合0.15小时
这个速度可以,如下就是改进后的程序:

Private Sub Command1_Click()
Dim a, b
a = Val(Text1)
a1 = a
Q = Val(Text2)
r = Val(Text4)
t = Timer
m = Sqr(Q)
If Right(a, 1) Mod 2 = 0 Then
a = a + 1
Else
a = a
End If

Do While InStr(fenjieyinzi(Val(a)), "*") <> 0
a = a + 2
Loop

Do While a <= Q
b = a
d = fenjieyinzi(Val(b))
s = 0
s3 = ""
Do While s >= 0 And InStr(d, "*") = 0
s4 = s + 1
If s4 Mod 20 = 0 Then
s3 = s3 & "/" & b & vbCrLf
Else
s3 = s3 & "/" & b
End If
s = s + 1
s2 = s * (s + 1)
b = b + r
d = fenjieyinzi(Val(b))
Loop
If s >= 10 Then
Text3 = Text3 & s3 & vbCrLf
End If
If s > 1 Then
s5 = s5 & "/" & s
Else
s5 = s5
End If
Print s5
a = a + 2
s2 = 0
Loop
s6 = Mid(s5, 2)
     s7 = max(Trim(s6))
Combo1 = a1 & "与" & Q & "之间的素数开头最多有公差为" & r & "的" & s7 & "个连续素数:用时" & Timer - t & "秒 " & vbCrLf & Text3


     

End Sub

Private Sub Command2_Click()
Text1 = ""
Text2 = ""
Text3 = ""
Text4 = ""
Combo1 = ""
Form1.Cls
End Sub
Private Function max(ByVal lists As String) As String
Dim temp As Long
Dim a() As String
a = Split(lists, "/")
Dim b As Long

For b = 0 To UBound(a)
If temp < a(b) Then temp = a(b)
Next
max = temp
End Function

Private Function fenjieyinzi(sa As String) As String
'改进了一下
Dim x, a, b
x = sa
b = Int(Sqr(Val(x)))
If x = 3 Or x = 2 Then
a = True
Else
If Val(x / 2) - Int(Val(x / 2)) = 0 Then
a = False
Else

For i = 3 To b Step 2
If Val(x / i) - Int(Val(x / 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
回复 支持 反对

使用道具 举报

 楼主| 发表于 2026-4-15 08:44 | 显示全部楼层
5,032,239,631-4047918759=984,320,872
984,320,872/8=123,040,109
123,040,109+1=123,040,110
4047918759+123,040,110=4,170,958,869
按浅陋的程序速度,从4047918759算到4,170,958,869需要7天时间
回复 支持 反对

使用道具 举报

 楼主| 发表于 2026-4-15 08:45 | 显示全部楼层
本帖最后由 ysr 于 2026-4-15 00:51 编辑

4051718759与4055718759之间的素数开头最多有公差为6469693230的9个连续素数:用时-45977.8秒,合12小时
12/4=3比前楼程序慢1倍。代码如下:

Private Sub Command1_Click()
Dim a, b
a = Val(Text1)
a1 = a
Q = Val(Text2)
r = Val(Text4)
t = Timer
m = Sqr(Q)
If Right(a, 1) Mod 2 = 0 Then
a = a + 1
Else
a = a
End If

Do While InStr(fenjieyinzi(Val(a)), "*") <> 0
a = a + 2
Loop

Do While a <= Q
b = a
d = fenjieyinzi(Val(b))
s = 0
s3 = ""
Do While s >= 0 And InStr(d, "*") = 0
s4 = s + 1
If s4 Mod 20 = 0 Then
s3 = s3 & "/" & b & vbCrLf
Else
s3 = s3 & "/" & b
End If
s = s + 1
s2 = s * (s + 1)
b = b + r
d = fenjieyinzi(Val(b))
Loop
If s >= 10 Then
Text3 = Text3 & s3 & vbCrLf
End If
If s > 1 Then
s5 = s5 & "/" & s
Else
s5 = s5
End If
Print s5
a = a + 2
s2 = 0
Loop
s6 = Mid(s5, 2)
     s7 = max(Trim(s6))
Combo1 = a1 & "与" & Q & "之间的素数开头最多有公差为" & r & "的" & s7 & "个连续素数:用时" & Timer - t & "秒" & vbCrLf & Text3

     

End Sub

Private Sub Command2_Click()
Text1 = ""
Text2 = ""
Text3 = ""
Text4 = ""
Combo1 = ""
Form1.Cls
End Sub
Private Function max(ByVal lists As String) As String
Dim temp As Long
Dim a() As String
a = Split(lists, "/")
Dim b As Long

For b = 0 To UBound(a)
If temp < a(b) Then temp = a(b)
Next
max = temp
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

回复 支持 反对

使用道具 举报

 楼主| 发表于 2026-4-15 08:56 | 显示全部楼层
4055718759与4055719759之间的素数开头最多有公差为6469693230的3个连续素数:用时4.164063秒
这次使用的是快速程序
回复 支持 反对

使用道具 举报

 楼主| 发表于 2026-4-15 09:04 | 显示全部楼层
4055718759与4055719759之间的素数开头最多有公差为6469693230的3个连续素数:用时0.7675781秒
这个反而更快?咋回事呢?

Private Sub Command1_Click()
Dim a, b
a = Val(Text1)
a1 = a
Q = Val(Text2)
r = Val(Text4)
t = Timer
m = Sqr(Q)
If Right(a, 1) Mod 2 = 0 Then
a = a + 1
Else
a = a
End If

Do While InStr(fenjieyinzi(Val(a)), "*") <> 0
a = a + 2
Loop

Do While a <= Q
b = a
d = fenjieyinzi(Val(b))
s = 0
s3 = ""
Do While s >= 0 And InStr(d, "*") = 0
s4 = s + 1
If s4 Mod 20 = 0 Then
s3 = s3 & "/" & b & vbCrLf
Else
s3 = s3 & "/" & b
End If
s = s + 1
s2 = s * (s + 1)
b = b + r
d = fenjieyinzi(Val(b))
Loop
If s >= 10 Then
Text3 = Text3 & s3 & vbCrLf
End If
If s > 1 Then
s5 = s5 & "/" & s
Else
s5 = s5
End If
Print s5
a = a + 2
s2 = 0
Loop
s6 = Mid(s5, 2)
     s7 = max(Trim(s6))
Combo1 = a1 & "与" & Q & "之间的素数开头最多有公差为" & r & "的" & s7 & "个连续素数:用时" & Timer - t & "秒" & vbCrLf & Text3

     

End Sub

Private Sub Command2_Click()
Text1 = ""
Text2 = ""
Text3 = ""
Text4 = ""
Combo1 = ""
Form1.Cls
End Sub
Private Function max(ByVal lists As String) As String
Dim temp As Long
Dim a() As String
a = Split(lists, "/")
Dim b As Long

For b = 0 To UBound(a)
If temp < a(b) Then temp = a(b)
Next
max = temp
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
回复 支持 反对

使用道具 举报

 楼主| 发表于 2026-4-15 09:26 | 显示全部楼层
本帖最后由 ysr 于 2026-4-15 03:00 编辑

4055718759与4055719759之间的素数开头最多有公差为6469693230的3个连续素数:用时2.269531秒



改进后也不行

Private Function fenjieyinzi(sa As Double) As String
'改进了一下
Dim x, a, b
x = Val(sa)
b = Sqr(Val(x))
If x = 3 Or x = 2 Then
a = True: fenjieyinzi = "这是个素数"
Else
If Right(x, 1) Mod 2 = 0 Then
a = False: fenjieyinzi = "2*2"
Else

For i = 3 To b Step 2
If InStr(Val(x / i), ".") = 0 Then
a = False: fenjieyinzi = "2*2"
Exit For

Else: a = True: fenjieyinzi = "这是个素数"

End If
Next
End If
End If

End Function
回复 支持 反对

使用道具 举报

 楼主| 发表于 2026-4-15 09:48 | 显示全部楼层
4055718759与4055719759之间的素数开头最多有公差为6469693230的3个连续素数:用时0.7851563秒
还是这个快,不知道咋回事:

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
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|数学中国 ( 京ICP备05040119号 )

GMT+8, 2026-4-30 08:02 , Processed in 0.116570 second(s), 14 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表