“本节课程我们来用VB验证哥德巴赫猜想。即,任一大于6的偶数都可写成两个素数之和”
01
—
界面设计
界面比较简单,按照上图设计界面即可。
02
—
思路分析
从哥德巴赫猜想的内容:任意一个大于6的偶数都可以用两个素数相加得到,我们可以用循环的方法来解决这个问题。
即,把一个偶数分解为两个整数,并验证这两个整数是否为素数,如果这两个数都是素数的话,那么就证明该偶数可以被分解为两个素数之和。我们只需要利用循环,确保遍历了所有的拆解即可。
举个例子,10这个偶数可以被拆解为:2+8,3+7,4+6,5+5一共4种拆解。我们只需要逐一的去判断这4种拆解中,有没有都是素数的,有的话则验证成功,那么也不需要继续往下验证了。
03
—
代码设计
首先我们根据之前素数判断的课程,编写一个判断输入的数字是否为素数的函数过程,以方便重复调用,具体代码如下:
Function isPrime(num As Long) As Boolean
Dim i&
Dim flag As Boolean
flag = True
For i = 2 To num - 1
If num Mod i = 0 Then
flag = False
Exit For
End If
DoEvents
Next i
If flag Then
isPrime = True
End If
End Function
然后,编写主程序,即按钮的单击事件:
Private Sub Command1_Click()
Dim num As Long, i As Long
num = Val(Text1)
If IsNumeric(num) = False Then MsgBox "请输入大于6的偶数": Exit Sub
If num <> Int(num) Then MsgBox "请输入大于6的偶数": Exit Sub
If num <= 6 Then MsgBox "请输入大于6的偶数": Exit Sub
If num Mod 2 <> 0 Then MsgBox "请输入大于6的偶数": Exit Sub
For i = 2 To num - 2
DoEvents
If isPrime(i) And isPrime(num - i) Then
MsgBox "符合哥德巴赫猜想,因为:" & vbCrLf & num & "=" & i & "+" & num - i & vbCrLf & "而" & i & "和" & num - i & "都是素数"
Exit For
End If
Next i
End Sub
需要注意的是,1并不能算严格意义上的素数,因此我们拆解的循环是从2开始,而不是1。
04
—
程序运行
运行程序,输入一个大偶数,单击按钮,即可弹出验证结果,输入的偶数越大则验证的时间会越长,如果输入的数大于Long数据类型的最大值,则会出错。