基础数论——试除判定质数

题目展示区

        

        题目描述:

                给定一个整数序列 A, 长度为 N, 判定序列 A 中每个数是否为质数

        输入格式:

                 第一行包含一个整数 N, 接下来 N 行, 每行包含一个整数 a_{i} 

        输出格式:

               共 n 行, 其中第 i 行输出第 i 个正整数 a_{i} 是否为质数,是则输出 "Yes", 否则输出"No"。 

        数据范围:

                1 ≤ N ≤ 100, 1 ≤ a_{i} ≤ 2^{31} - 1

        输入样例:

2

2

6

        输出样例:

Yes

No

相关概念介绍区

        整除:

                整数 a 除以自然数 b 除得的 商 正好是 整数 而 余数 是 零, 我们就能说 a 能被 b 整除,

        或者说 b 能整除 a。

        因子:

                因子就是所有可以整除这个数的数,不包括这个数自身.

        质数:

                在大于1的自然数中,除了1和该数自身外, 无法被其他自然数整除 的数, 最小的质数是 2

题目分析区

        解题宝剑:

                假设一个质数为 n

                质数的定义,换句人话来讲,就是 质数只能被 1 和 其自身 两个数整除,也就是说,

          我们无法从 2 到 n - 1 中找到 一个可以 整除 n 的数

        解题大法:

                判断 n 是否是质数

                我们可以让 n 除以从 2 到 n - 1 中的每个数,如果说出现了余数是 0 的情况,那么这个

        数就不是质数,否则就是质数, 但是这里需要特判一下 2 这个数字

        大法提纲:

                如果给一个数 n 分解成两个数的乘积,那么一定有个数大于 \sqrt{n}, 一个数小于 \sqrt{n}

        所以我们只枚举 2 到 \sqrt{n} 之间的整数就可以了,此时既不需要特判 2 ,同时也在运行效率上

        有了较大的提升

代码 + 注释区

        核心代码区:
bool is_prime(int n){
    if (n < 2) return false;
    // 如果是小于 2 的数,直接返回false
    
    // i * i 有可能会溢出
    // sqrt() 效率比较慢
    for (int i = 2; i <= n / i; i ++)
        if (n % i == 0) return false;
    
    // 否则就是质数
    return true;
}
        整体代码区:
#include <iostream>

using namespace std;

bool is_prime(int n){
    if (n < 2) return false;
    
    for (int i = 2; i <= n / i; i ++)
        if (n % i == 0) return false;
    
    return true;
}

int main(){
    int n;
    cin >> n;
    
    for (int i = 1; i <= n; i ++){
        int a;
        cin >> a;
        if (is_prime(a)) cout << "Yes" << endl;
        else cout << "No" << endl;
    }
    
    return 0;
}

  • 6
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值