质数判断

这个问题可能太简单了,但是还是总结一下。

质数即素数,即大于1的自然数中,除了1和它本身以外不再有其他因数的自然数,也就是说只有两个因子,1和这个数本身。

正常的思路是将这个数模2取余,若为0,则定不是素数

还有特殊情况就是,这个数需要大于1

实现如下:

public  static boolean  isSuShu(int x){
    if (x<0){
        return  false;
    }
    if (x ==1 || x %2 ==0 && x !=2){
        return false;
    }
    for (int i=2 ; i<x ; i++){
        if ( x%i==0){
            return  false;
        }
    }
    return true;
}

效率更高的实现:
public  static  boolean isSuShu(int x ){
        if (x ==1){
            return  false;
        }
        for (int i =2;i<Math.sqrt(x);i+=2){
            if (x%i == 0){
                return  false;
            }
        }
        return true;
    }

比如16以内的因数有 1,2,4,8,16,sqrt(16)=4,只要遍历4以内的数能不能被1和4本身以外的数整除就可以,发现4以内的数有2,4可以被2整除,所以8就不用遍历了,以此类推....

在比如24以内的因数,有1,2,3,4,6,8,12,24,sqrt(n)=4.898979485566356,这个数以内有2,3,4这些因子,正好对应因子12,8,6,所以只要遍历sqrt(n)以内的数即可,这样遍历的次数就减少了

综上,时间复杂度降为O(sqrt(n))。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值