在《Go语言实战案例》中 案例11:判断一个数是否为质数 的完整内容,适合初学者练习条件判断、循环控制与函数编写。
案例11:判断一个数是否为质数
🔢 数学判断 | 🔁 循环与条件 | 🧠 初阶逻辑思维训练
一、案例目标
编写一个程序,判断用户输入的正整数是否是质数(又称素数)。
二、应用场景举例
- • 数学题目求解
- • 加密算法中的大质数判定(如RSA)
- • 数学建模、筛选质数列表等
三、涉及知识点
| 知识点 | 说明 |
| 质数定义 | 只能被 1 和它本身整除的自然数(大于1) |
for 循环 |
判断是否能被其他数整除 |
| 条件语句 | if / else 判断是否满足质数条件 |
| 函数封装 | 判断逻辑封装为独立函数 |
四、功能需求
- 1. 用户输入一个正整数;
- 2. 判断该数是否为质数;
- 3. 输出“是质数”或“不是质数”。
五、完整代码实现
package main import ( "fmt" "math" ) // 判断一个数是否为质数 func isPrime(n int) bool { if n <= 1 { return false } sqrtN := int(math.Sqrt(float64(n))) for i := 2; i <= sqrtN; i++ { if n%i == 0 { return false } } return true } func main() { var num int fmt.Print("请输入一个正整数:") fmt.Scanf("%d", &num) if isPrime(num) { fmt.Printf("%d 是一个质数。\n", num) } else { fmt.Printf("%d 不是一个质数。\n", num) } }
六、示例运行
示例1:
请输入一个正整数:13 13 是一个质数。
示例2:
请输入一个正整数:20 20 不是一个质数。
七、核心实现解析
func isPrime(n int) bool { if n <= 1 { return false // 小于等于1的数不是质数 } sqrtN := int(math.Sqrt(float64(n))) // 只判断到√n即可 for i := 2; i <= sqrtN; i++ { if n%i == 0 { return false // 存在其他因数 } } return true }
- • 用平方根优化判断范围是为了提升效率;
- • 如果
n能被[2, √n]中的任意一个整除,就不是质数; - • 函数封装后主函数调用简单、易于维护。
八、拓展建议
- 1. 批量判断多个数字是否为质数;
- 2. 输出某个区间内的所有质数;
- 3. 实现埃拉托色尼筛法生成质数表;
- 4. 支持输入负数与非法值并提示错误;
- 5. 用并发判断多个数是否为质数(goroutine)。
🔚 小结
本案例锻炼了你对:
- • 条件判断;
- • 循环控制;
- • 数学基础逻辑(质数定义);
- • 函数封装;
的掌握和应用。
✅ 质数判断是很多算法和加密技术的基础逻辑,掌握它为进阶算法打下基础。