'第一个题是:验证哥德巴赫猜想:“任何一个大于6的偶数,均可以表示为两个素数之和”,从键盘输入一个大于6的偶数后,打印出所有的分解结果。
Option Explicit
Dim S() As Long '小于输入数T的所有素数
Dim N As Long '数组S的上界,数组S下界为1
Private Sub Command1_Click()
Dim i As Long, j As Long, k As Long
Dim T As Long '输入的数
Dim Z As Boolean
Dim M As Long 'S数组中要用到的素数上限
T = Val(InputBox("验证哥德巴赫猜想,请输入一个大于6的整数。", ""))
If T <= 6 Or T Mod 2 <> 0 Then
MsgBox "输入的整数不符合要求。", , ""
Exit Sub
End If
If N = 0 Then
N = 3
ReDim S(1 To 3)
S(1) = 2
S(2) = 3
S(3) = 5
End If
If T > S(N) Then
For i = S(N) + 1 To T - 1
k = Int(Sqr(i))
Z = True
For j = 1 To N
If S(j) > k Then Exit For
If i Mod S(j) = 0 Then
Z = False
Exit For
End If
Next j
If Z Then
N = N + 1
ReDim Preserve S(1 To N)
S(N) = i
End If
Next i
M = N
Else
For i = 1 To N
If S(i) > T Then
M = N - 1
Exit For
End If
Next i
End If
Cls
For i = 1 To M
For j = 1 To M
If S(i) + S(j) = T Then
If S(i) > S(j) Then Exit Sub '中断后面一半的输出,因为后面一半只不过是把前一半输出的两个数前后对调
Print CStr(T) & " = " & CStr(S(i)) & " + " & CStr(S(j))
End If
Next j
Next i
End Sub
'第二个题是:程序运行时,首先随机产生30个100-3000之间的任意年份,并显示在List1中,单击判断按钮时,选出的是闰年年份,显示在list2中,单击排序按钮时,将选出的闰年的年份值按从小到大的顺序排列,并重新显示在list2中。
'说明:判断某一年是否是闰年有两个条件:1、能被4整除但不能被100整除。2、既能被4整除又能被100整除。
Option Explicit
Dim A(1 To 30) As Long
Dim B(1 To 30) As Long
Dim C(1 To 30) As Long
Dim BN As Long, CN As Long
Private Sub Command1_Click() '判断
Dim i As Long
BN = 0
List2.Clear
For i = 1 To 30
'这是按题目要求进行的判断,实际上这个关于闫年的判断条件是不正确的(能被100整除则必能被4整除),第2个判断条件应该是能被400整除才对,这里按题目的写。
If (A(i) Mod 4 = 0 And A(i) Mod 100 <> 0) Or (A(i) Mod 4 = 0 And A(i) Mod 100 = 0) Then
BN = BN + 1
B(BN) = A(i)
List2.AddItem CStr(A(i))
End If
Next i
End Sub
Private Sub Command2_Click() '排序
Dim i As Long, j As Long, k As Long
CN = BN
For i = 1 To CN
C(i) = B(i)
Next i
For i = 1 To CN - 1
For j = i + 1 To CN
If C(i) > C(j) Then
k = C(i)
C(i) = C(j)
C(j) = k
End If
Next j
Next i
List2.Clear
For i = 1 To CN
List2.AddItem CStr(C(i))
Next i
End Sub
Private Sub Form_Load()
Dim i As Long
List1.Clear
For i = 1 To 30
Randomize
A(i) = Int((3000 - 100 + 1) * Rnd + 100)
List1.AddItem CStr(A(i))
Next i
End Sub