题解 | #判断一个数是不是质数#

判断一个数是不是质数

http://www.nowcoder.com/practice/b8bb5e7703da4a83ac7754c0f3d45a82

题意整理。

  • 输入一个大于1的数。
  • 判断这个数是否是质数。

方法一(循环)

1.解题思路

  • 如果一个数除了被1和它本身整除,不能被其它任何数整除,则这个数是质数。所以只需要验证输入的数字n能否被2到n-1之间的任何数整除。
  • 再进一步思考,如果n能被一个大于n\sqrt{n}的数整除,我们不妨设这个大于n\sqrt{n}的数为t,则n也一定能被n/tn/t整除,而n/t是小于n\sqrt{n}的,所以只需验证输入的数字n能否被2到n\sqrt{n}之间的任何数整除。

动图展示: alt

2.代码实现

#include <iostream>
using namespace std;

//判断是否是质数
bool isPrime(int x){
    for(int i=2;i*i<=x;i++){
        //如果一个数能被2到根号x之间的任意一个数整除,则不是质数
        if(x%i==0){
            return false;
        }
    }
    return true;
}

int main() {

    int num;
    cin>>num;
    if(isPrime(num)){
        cout<<"是质数"<<endl;
    }
    else{
        cout<<"不是质数"<<endl;
    }

    return 0;
}

3.复杂度分析

  • 时间复杂度:假设输入的数是n,循环最多执行n1\sqrt{n}-1次,所以时间复杂度为O(n)O(\sqrt{n})
  • 空间复杂度:需要额外常数级别的空间,所以空间复杂度为O(1)O(1)
xqxls的题解 文章被收录于专栏

牛客题解

全部评论

相关推荐

黑皮白袜臭脚体育生:简历统一按使用了什么技术实现了什么功能解决了什么问题或提升了什么性能指标来写会更好另外宣传下自己的开源仿b站微服务项目,GitHub已经410star,牛客上有完整文档教程,如果觉得有帮助的话可以点个小星星,蟹蟹
点赞 评论 收藏
分享
评论
18
2
分享

创作者周榜

更多
牛客网
牛客企业服务