试除法判定质数:深入探索与代码分析
质数它是只有 1 和其自身两个正因子的自然数,例如:2、3、5、7 等。这篇文章将探讨如何使用试除法来判定一个数字是否为质数,并通过提供的代码来进行详细的分析。
1. 试除法是什么?
试除法是判定质数最直观、简单的方法。它的基本思想是:要确定一个数 n
是否为质数,我们可以尝试去除 2
到 sqrt(n)
之间的所有整数。如果 n
可以被这其中的任何一个数整除,那么 n
就不是一个质数。
2. 为什么只除到 sqrt(n)
?
一个很好的观察是:如果 n
不是质数,并且它有一个因子大于 sqrt(n)
,那么它必定有一个小于或等于 sqrt(n)
的因子。因此,我们只需要检查 2
到 sqrt(n)
范围内的数。
为了使代码更高效,我们用 i <= x / i
代替 i <= sqrt(x)
来避免使用昂贵的平方根计算。
代码分析:
bool is_prime(int x)
{
if (x < 2) return false; // 小于2的数不是质数
for (int i = 2; i <= x / i; ++ i) // 从2遍历到x的平方根
{
if (x % i == 0) return false; // 如果x能被i整除,那么x不是质数
}
return true; // 如果循环完成,x就是质数
}
此函数的核心就是上面描述的试除法。它首先排除小于2的数,然后尝试除以每一个小于其平方根的正整数。
3. 主函数的功能
主函数首先读入一个数 n
,表示接下来有 n
个数需要检查是否为质数。然后,对于这 n
个数,它调用 is_prime
函数并输出结果。
int main()
{
int n;
cin >> n;
while(n --) // 遍历这n个数
{
int t;
cin >> t;
if (is_prime(t)) cout << "Yes\n"; // 如果t是质数,输出"Yes"
else cout << "No\n"; // 否则输出"No"
}
return 0;
}