hnust 1100 实验3-2:素数判断

hnust 1100 实验3-2:素数判断

题目描述

判断正整数x是否为素数。

质数又称素数。指在一个大于1的自然数中,除了1和此整数自身外,没法被其他自然数整除的数。换句话说,只有两个正因数(1和自己)的自然数即为素数。比1大但不是素数的数称为合数。1和0既非素数也非合数。

输入

先输入一个整数n(表示后面要输入n个测试数据);

然后输入n个测试数据,每个测试数据是一个正整数x。

输出

与n个输入的正整数x相对应,输出判断结果。如果是素数,输出"Yes",不是素数,输出"No"。

样例输入 Copy

5

7

8

795

181

888

样例输出 Copy

Yes

No

No

Yes

No

提示

本题由教材例3-18改编而成。

本题难度系数为4。

解题过程

一个简单的素数检测程序,用于判断用户输入的一系列整数是否为素数。

下面是对代码的详细解析:

  1. 头文件

    • 包含 <bits/stdc++.h> 头文件,这是一个常用的头文件,包含了标准库中的大部分内容,以及一些竞赛编程中常用的额外头文件。
  2. 命名空间

    • 使用 using namespace std; 来避免在标准库类型和函数前加 std::
  3. 素数检测函数 prime

    • 接收一个整数 x 作为参数。
    • 如果 x 等于1,直接返回 false,因为1不是素数。
    • 使用一个 for 循环从2遍历到 x/i,检查 x 是否能被其中任何数整除。
    • 如果 x 能被整除,返回 false 表示 x 不是素数。
    • 如果循环结束后没有找到整除的数,返回 true 表示 x 是素数。
  4. 主函数 main

    • 首先读取一个整数 j,表示接下来有多少组测试数据。
    • 使用一个 for 循环,从1到 j(包括 j),处理每组测试数据。
    • 在每次循环中,读取一个整数 n,表示要检测的数。
    • 调用 prime 函数判断 n 是否为素数。
    • 根据 prime 函数的返回值,输出 "Yes" 或 "No"。
  5. 程序结束

    • 输入结束后,程序返回0,表示正常结束。

代码逻辑分析

  • 这段代码首先读取测试数据组数,然后对于每组数据,读取一个整数并判断它是否为素数。
  • 使用了素数的基本定义来实现判断逻辑,即一个数如果除了1和它本身外没有其他因数,则为素数。

潜在问题

  • prime 函数的时间复杂度较高,对于大数的素数检测效率较低。
  • prime 函数没有考虑 x 为负数或0的情况,虽然这不是素数检测的常见情况。

改进建议

  • 考虑优化 prime 函数,例如只检查到 sqrt(x),因为如果 x 是合数,它必定有一个不大于 sqrt(x) 的因数。
  • 可以添加对输入数据有效性的检查,确保读取的是有效的整数。
  • 考虑使用更现代的C++特性,如 std::vector,以提高代码的灵活性和健壮性。

部分代码

代码如下( 素数判断。):

c 复制代码
bool prime(int x){
    if(x==1)return 0;
    for(int i=2;i<=x/i;i++)
        if(x%i==0)return 0;
    return 1;
}

AC代码

c 复制代码
#include<bits/stdc++.h>
using namespace std;
bool prime(int x){
    if(x==1)return 0;
    for(int i=2;i<=x/i;i++)
        if(x%i==0)return 0;
    return 1;
}
int main()
{
    int j;cin>>j;int n;
    for(int i=1;i<=j;i++)
    {
        cin>>n;
        if(prime(n)){cout<<"Yes"<<endl;}
        else cout<<"No"<<endl;
    }
     
    return 0;
}
相关推荐
故事和你9118 分钟前
洛谷-【动态规划2】线性状态动态规划4
开发语言·数据结构·c++·算法·动态规划·图论
不吃土豆的马铃薯21 分钟前
Socket 网络编程实战教程
linux·服务器·开发语言·网络·c++·算法
零号全栈寒江独钓27 分钟前
c++跨平台实现日志重定向
linux·c++·windows
小成2023032026537 分钟前
从C到C++
开发语言·c++
longxiangam1 小时前
esp-idf dsi 屏幕的驱动实现原理—— 关于零拷贝和 DMA 永续刷新
c语言·单片机·嵌入式硬件
葱卤山猪1 小时前
C++17 联合体
开发语言·c++
weixin_468466851 小时前
图像滤波算法新手实战指南
图像处理·人工智能·算法·计算机视觉·ai·机器视觉·滤波
Ulyanov1 小时前
深入QML-Python通信 构建响应式交互界面的桥梁设计:QML+PySide6现代开发入门(五)
开发语言·python·算法·交互·qml·系统仿真
不会C语言的男孩1 小时前
C++ Primer Plus 第9章:内存模型和名称空间
开发语言·c++
重生之我是Java开发战士1 小时前
【贪心算法】加油站,单调递增的数字,坏了的计算器,合并区间,用最少数量的箭引爆气球
算法·贪心算法