For m = 2 To 100 ’1不是素数
For i = 2 To sqr(m) '验证到根号m即可,减少运算量
If (m Mod i) = 0 Then
Flag=1
Exit For
End if
Next i
If Flag = 0 Then
Print m
End if
Flag = 0‘清除标志
Next m
你说只能算到59可能是你窗体太小了。这个代码是没有问题的。最好是用一个文本框。代码如下:
For m = 2 To 100
For i = 2 To sqr(m)
If (m Mod i) = 0 Then
Flag=1
Exit For
End if
Next i
If Flag = 0 Then
text1.text=text1.text & m & vbCrLf
End if
Flag = 0‘清除标志
Next m
还有一种不用标记flag的代码可以这样写:
For m = 2 To 100
For i = 2 To sqr(m)
If (m Mod i) = 0 Then
Exit For
End if
Next i
If i<=sqrt(m) Then
text1.text=text1.text & m & vbCrLf
End if
Next m
这种算法就简洁很多
Private Sub Command1_Click()
For m = 2 To 100
flag = 0
For i = 2 To m - 1
If (m Mod i) = 0 Then
flag = 1
Exit For
End If
Next i
If flag = 0 Then
Print m;
j = j + 1
If j Mod 5 = 0 Then Print '每输出5个换一行
End If
Next m
End Sub
‘你的flag没有用在print上啊,给你修改一下试试行不行 :
Private Sub Command1_Click()
For m = 2 To 100
For i = 2 To Int(Sqr(m))
If (m Mod i) = 0 Then Exit For
Next
If i = Int(Sqr(m)) + 1 Then Print m '正常退出就是素数,理解一下
Next
End Sub
For m = 1 To 100 ’1也是素数
For i = 2 To m - 1
If (m Mod i) = 0 Then
Flag=1
Exit For
End if
Next i
If Flag = 0 Then
Print m
End if
Flag = 0‘清除标志
Next m
这个好像是等级考试里面的题目