Excel中VBA质数判断函数IsPrimeTrialDivision始终返回FALSE的原因
问题原因与修复方案
你的代码核心问题是函数名称和返回值赋值的名称不匹配:
- 你定义的函数名是
IsPrimeTrialDivision,但函数内部所有返回结果的地方都用了IsPrime来赋值 - VBA中布尔型函数默认返回
False,如果没有正确给函数本身的名称赋值,就会一直返回默认的False
修复后的代码如下:
Function IsPrimeTrialDivision(number As Long) As Boolean Dim i As Long If number <= 1 Then IsPrimeTrialDivision = False Exit Function End If ' 把Sqr的结果转成Long,避免浮点类型导致循环范围异常 For i = 2 To CLng(Sqr(number)) If number Mod i = 0 Then IsPrimeTrialDivision = False Exit Function End If Next i IsPrimeTrialDivision = True End Function
额外补充:
- 原代码中
Sqr(number)返回的是Double类型,直接用在Long类型的循环变量里,可能会因为浮点精度问题导致循环范围不准确,加上CLng()转换更稳妥 - 测试时可以用
=IsPrimeTrialDivision(7)这类单元格公式验证,应该会返回True
内容的提问来源于stack exchange,提问作者Robin
相关产品推荐
相关产品推荐

