【发布时间】:2020-05-25 19:31:49
【问题描述】:
我对 VBA 很陌生。我在excel电子表格的A列(即A1:A100)中有一个从1到100的指定数字列表。我希望我的代码在同一工作表的 B 列中的每个数字 1 到 100 旁边打印它是否是素数 [输出:“素数”或“非素数”] 的结果。这就是我到目前为止所拥有的。逻辑有效,但问题是代码在 n=1 之后似乎没有循环。任何建议如何使这项工作?
Sub primenumber()
Dim i As Integer
Dim divisor As Integer
Dim rng As Range, n As Range
Set rng = Range("A1:A100")
Worksheets("Sheet1").Activate
For Each n In rng
Debug.Print n
divisor = 0
For i = 1 To n
If n Mod i = 0 Then
divisor = divisor + 1
End If
Next i
'Debug.Print i
If divisor = 2 Then
ActiveSheet.Range("B1").Value = "Prime"
Else
ActiveSheet.Range("B1").Value = "Not Prime"
End If
Next n
End Sub
【问题讨论】:
-
为什么要检查范围内每个数字的可分性?这是极其低效的。如果您看到 100 mod 2 = 0,则没有充分的理由仍然检查 100 mod 3、100 mod 4 等。
-
你研究过这个吗?如何做到这一点已经在这个网站上有很好的记录。