EP05. “Prime Number Checker 质数检查器”
🔒 登录后可标记已读- 这篇用
For循环加Mod运算符写一个判断质数的小程序 - 质数的定义是「只有 1 和它本身两个因数」的数字,比如 2、3、5、7 都是质数,8 不是(因数有 1、2、4、8 共四个)
- 前置知识:EP04 的
Mod运算符和基本的For循环 - 学完能理解怎么用循环枚举因数来验证一个数学性质
重点内容
适用版本
桌面版通用(Excel 365 / 2021 / 2019 等)。
完整 VBA 代码
Dim divisors As Integer, number As Long, i As Long
divisors = 0
number = InputBox("Enter a number")
For i = 1 To number
If number Mod i = 0 Then
divisors = divisors + 1
End If
Next i
If divisors = 2 Then
MsgBox number & " is a prime number"
Else
MsgBox number & " is not a prime number"
End If
代码说明
- 声明
divisors(因数个数计数器,Integer)、number(要检查的数字)、i(循环变量),number和i用Long(长整数)是因为要检查的数字可能很大,Integer容易溢出 divisors初始化为 0,用InputBox弹出输入框让使用者输入要检查的数字- 用
For i = 1 To number从 1 一路循环到number本身 - 每次循环用
number Mod i = 0判断i是不是number的因数(余数为 0 表示能整除),能整除就把divisors加 1 Next i结束循环- 循环跑完后,如果因数总数正好是 2(只有 1 和它本身),弹窗显示是质数,否则显示不是质数
运行示例
弹窗输入 104729,跑完程序会弹窗显示 "104729 is a prime number"。
怎么运行
Alt + F11 打开 VBA 编辑器,把代码放进模块或按钮点击事件,按 F5 或点命令按钮执行,会先弹出输入框,输入数字后再弹出结果框。
学完你会
- ✅ 会用
For循环枚举一个数字的所有因数 - ✅ 会用因数个数是不是等于 2 来判断质数
- ✅ 懂得用
Long而不是Integer声明可能很大的数字,避免溢出
常见错误
number和i声明成Integer而不是Long——Integer最大只能存到 32767,检查大一点的数字会直接溢出报错- 数字越大,循环次数越多(因为是从 1 一路数到 number 本身),检查很大的数字时程序会明显变慢,这是这个写法效率上的取舍,不是 bug
- 忘记 1 本身不是质数(只有 1 个因数),这个程序对 1 会正确判断成「不是质数」,但如果自己改写逻辑要注意这个边界情况
Sources
Blog / Website: