在《Go语言实战案例》中 案例11:判断一个数是否为质数 的完整内容,适合初学者练习条件判断、循环控制与函数编写。
案例11:判断一个数是否为质数
🔢 数学判断 | 🔁 循环与条件 | 🧠 初阶逻辑思维训练
一、案例目标
编写一个程序,判断用户输入的正整数是否是质数(又称素数)。
二、应用场景举例
- 数学题目求解
- 加密算法中的大质数判定(如RSA)
- 数学建模、筛选质数列表等
三、涉及知识点
知识点 | 说明 |
---|---|
质数定义 | 只能被 1 和它本身整除的自然数(大于1) |
for 循环 |
判断是否能被其他数整除 |
条件语句 | if / else 判断是否满足质数条件 |
函数封装 | 判断逻辑封装为独立函数 |
四、功能需求
- 用户输入一个正整数;
- 判断该数是否为质数;
- 输出"是质数"或"不是质数"。
五、完整代码实现
go
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 不是一个质数。
七、核心实现解析
go
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]
中的任意一个整除,就不是质数; - 函数封装后主函数调用简单、易于维护。
八、拓展建议
- 批量判断多个数字是否为质数;
- 输出某个区间内的所有质数;
- 实现埃拉托色尼筛法生成质数表;
- 支持输入负数与非法值并提示错误;
- 用并发判断多个数是否为质数(goroutine)。
🔚 小结
本案例锻炼了你对:
- 条件判断;
- 循环控制;
- 数学基础逻辑(质数定义);
- 函数封装;
的掌握和应用。
✅ 质数判断是很多算法和加密技术的基础逻辑,掌握它为进阶算法打下基础。