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

判断一个数是不是质数

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的题解 文章被收录于专栏

牛客题解

全部评论

相关推荐

10-05 23:02
东北大学 Java
我说句实话啊:那时候看三个月培训班视频,随便做个项目背点八股,都能说3 40w是侮辱价
点赞 评论 收藏
分享
11-09 01:22
已编辑
东南大学 Java
高级特工穿山甲:羡慕,我秋招有家企业在茶馆组织线下面试,约我过去“喝茶详谈”😢结果我去了发现原来是人家喝茶我看着
点赞 评论 收藏
分享
18 2 评论
分享
牛客网
牛客企业服务