'[例3-9] 输出指定两个整数之间的所有素数.所谓素数是指除了1与其自身外不能被任何数整除的数.程序代码如下:
Private Sub Form_Click()
m = InputBox("请输入一个整数")
n = InputBox("请输入另一个整数")
If n < m Then
t = n
n = m
m = t
End If
For i = m To n
k = Int(Sqr(i)) '①
j = 2
swit = 0 '②
While j <= k And swit = 0
If i Mod j = 0 Then
swit = 1
Else
j = j + 1
End If
Wend
If swit = 0 Then
d = d + 1
If d Mod 5 = 0 Then
Print i; " ";
Print
Else
Print i; " ";
End If
End If
Next i
End Sub
'将程序保存在frmExam_3_9的窗体中,在输入100与300后,运行的结果如图3-9所示.
'①我承认我的数学比较差,但是这里的k具体代表的是什么,对i进行开方取整有什么意义?
'②swit翻译成中文是什么意思?
因为一个合数可以写为n=a*b,易证如果a和b都大于根号n,则a*b不必然大于n
所以对于数n,只需要判别其是否会被2~根号n范围内的整除整除即可(因为如果有大于根号n的b满足a*b=n,则a必然小于根号n,而这种情况在前面会被发现)
swit看起来就是个计数的变量
有帮助望采纳
k 是j循环的终止值。k 设置为 i的平方根取整是只要 j 从2循环 i的平方根取整就可以判断是素数了
swit 只是个变量名,变量名可以任意起名没什么意思
回复你的问题:
1、开根号是为了减少循环次数,检查一个数是否为素数,你不需要从1到这个数本身都去求余判断,只需要到这个数开根号,比如 12 = 2*6,你不需要遍历到6,因为求余2如果为0,那么求余6也必然为0
2、swit是个开关量,表示当前检测的整数是否为素数的标志。当当前数求余某个整数为0时,说明该数不是素数,则将swit设置为0,然后直接可以结束对这个数的后续判断。循环结束后的代码只要检查swit这个标志,就知道当前检测的整数是不是素数了。
以上回复希望对你有所帮助
因为一个合数可以写为n=ab,易证如果a和b都大于根号n,则ab必然大于n.(合数是指在大于1的整数中除了能被1和本身整除外,还能被其他数(0除外) 整除的数.)
所以对于数n,只需要判别其是否会被2~根号n范围内的整数整除即可(因为如果有大于根号n的b满足a*b=n,则a必然小于根号n,而这种情况在前面会被发现).
swit看起来就是个计数的变量,是个开关量(switching value).
答主好厉害.