试除法判定质数:深入探索与代码分析

简介: 试除法判定质数:深入探索与代码分析

试除法判定质数:深入探索与代码分析

质数它是只有 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;
}
相关文章
|
8月前
|
存储 算法 数据挖掘
深入解析力扣166题:分数到小数(模拟长除法与字符串操作详解及模拟面试问答)
深入解析力扣166题:分数到小数(模拟长除法与字符串操作详解及模拟面试问答)
|
算法 C语言
【C语言】判断一个数是否为素数(素数求解的N种境界)(下)
【C语言】判断一个数是否为素数(素数求解的N种境界)(下)
141 0
|
9月前
|
算法 搜索推荐 程序员
第四十二练 检测循环括号
第四十二练 检测循环括号
48 1
|
9月前
|
算法 C++
试除法求约数:深入分析与实践
试除法求约数:深入分析与实践
86 3
|
9月前
|
人工智能
试除法判定质数
试除法判定质数
54 0
|
9月前
|
人工智能 Java C++
试除法求约数
试除法求约数
60 0
|
算法 搜索推荐 程序员
C语言第十三练——输入一个正整数,判断这个数是否是素数
C语言第十三练——输入一个正整数,判断这个数是否是素数
144 0
|
算法 C语言 C++
【数论】试除法判断质数,分解质因数,筛质数
将定义进行模拟,若整除了除1与其自身的另外的数,则为质数
152 0
|
C语言
C语言:写一个代码,使用 试除法 打印100~200之间的素数(质数)-1
思路一:使用试除法 总体思路: (一). 使用外循环:生成 100~200 之间的数。 (二). 设置内循环:生成 2 ~ i-1 的数。
136 0
|
C语言
C语言:写一个代码,使用 试除法 打印100~200之间的素数(质数)-2
思路二: 总体思路: 因为偶数除了 2 都不是素数,且题目范围中没有 2 , 所以可以只生成 100~200 之间的奇数,可以排除一半的数字, 效率提升一倍。
140 0