VBA素数检测代码修改求助:需仅输出数值的素约数
VBA素约数输出修改方案

修改思路很简单,新增一个素数判断辅助函数,对原有逻辑找到的约数增加素数校验即可,修改后的完整代码如下:
' 素数判断辅助函数 Function IsPrime(num As Integer) As Boolean If num < 2 Then IsPrime = False Exit Function End If Dim m As Integer For m = 2 To Sqr(num) If num Mod m = 0 Then IsPrime = False Exit Function End If Next m IsPrime = True End Function Private Sub CommandButton1_Click() Dim i As Integer, divisors As Integer, number As Integer, j As Integer, k As Integer, q As Integer For i = 2 To Range("A1").CurrentRegion.Rows.Count number = Cells(i, 1).Value divisors = 0 k = 3 For j = 1 To number q = number Mod j If q = 0 Then divisors = divisors + 1 ' 仅输出符合条件的素约数 If j <> 1 And j <> number And IsPrime(j) Then Cells(i, k) = j k = k + 1 End If End If Next j If divisors = 2 Then Cells(i, 2).Value = "This is a prime number" Cells(i, 2).Interior.Color = vbRed Else Cells(i, 2).Value = "Divisors of " & Cells(i, 1).Value End If Columns("B").AutoFit Next i End Sub
修改说明:
- 新增的
IsPrime函数可直接复用,校验逻辑做了优化,仅遍历到数值的平方根就可以完成素数判断,运算效率更高 - 原有逻辑仅新增了
And IsPrime(j)的判断条件,其余素数标红、提示文本、列宽自适应等功能完全保留,和原有使用习惯一致 - 如果需要处理超过32767的大数值,可以把代码里的
Integer类型替换为Long避免溢出报错
内容的提问来源于stack exchange,提问作者Shtritz
相关产品推荐
相关产品推荐

