VB常考算法(三)素数:
1、算法说明
所谓素数是指只能被1和它本身整除的数。
1)判断某数是否为素数。
根据循环控制变量来判断。
算法说明:根据素数只能被1和它本身整除的性质,我们可以使用循环依次判断2到n-1(或者Sqr(n))之间有没有被它整除的数,一旦有退出循环,退出循环后通过检验循环变量的值来判断是不是素数。
即,当循环正常退出,循环变量的值等于n时,该数是素数;当循环提前退出,循环变量的值小于等于n-1,该数不是素数。
程序代码如下:
Private Sub Command1_Click()
Dim n As Integer, i As Integer
n = Val(Text1.Text)
If n < 1 Then
MsgBox "请正确输入数据"
Else
n = Val(Text1.Text)
For i = 2 To n - 1
If n Mod i = 0 Then Exit For
Next i
If i = n Then
MsgBox n & "是素数"
Else
MsgBox n & "不是素数"
End If
End If
End Sub
2)判断某数是否为素数。
根据标志位flg来判断。
Private Sub Command1_Click()
Dim n As Integer, i As Integer
Dim flg As Boolean
flg = True
n = Val(Text1.Text)
If n < 1 Then
MsgBox "请正确输入数据"
Else
n = Val(Text1.Text)
For i = 2 To n - 1
If n Mod i = 0 Then flg = False
Next i
If flg = True Then
MsgBox n & "是素数"
Else
MsgBox n & "不是素数"
End If
End If
End Sub
3)使用函数过程。
通过函数返回值来判断。
Private Function isprime(n As Integer) As Boolean
Dim i As Integer
isprime = True
For i = 2 To n - 1
If n Mod i = 0 Then
isprime = False
Exit Function
End If
Next i
End Function
或者
Private Function isprime(n As Integer) As Boolean
Dim i As Integer
isprime = False
For i = 2 To n - 1
If n Mod i = 0 Then
Exit Function
End If
Next i
isprime = True
End Function
2、实战练习
1)完善程序
算法说明:下列程序是查找四位正整数中的超级素数。
所谓超级素数:当一个素数从低位到高位依次去掉一位数后剩下的数仍然是素数,则此数为超级素数。
如数2332、233、23、2均为素数,所以2333为超素数。
Option Explicit
Private Sub Command1_Click()
Dim i As Integer, flg As Boolean
For i = 1001 To 9999 Step 2
Call sup_prime(i, flg)
If flg Then
Debug.Print i
End If
Next i
End Sub
Private Sub sup_prime( (1) , f As Boolean)
Dim p As Integer
f = True
Do While n > 0
If prime(n) Then
(2)
Else
(3)
Exit Sub
End If
Loop
End Sub
Private Function prime(p As Integer) As Boolean
Dim k As Integer
If p = 1 Then
Exit Function
Else
For k = 2 To Sqr(p)
If p Mod k = 0 Then Exit Function
Next k
(4)
End If
End Function
2)编程题
热身:
●如何在文本框中以5个一行的形式显示100~300之间的数值?
●编写程序,输入数据范围m、n,求出介于m、n之间所有的素数,并按每行
五个素数的形式输出到多行文本框中。
实战:
随机生成15个两位正整数,从中找出所有的素数,并记下它是第几个数,再找出其中最大的素数,并给出它的位置。
程序运行界面如图所示:。