判断一个数是不是质数(素数)

判断一个数是不是质数、素数

1. 概念介绍

  • 质数又称素数。一个大于1的自然数,除了1和它自身外,不能被其他自然数整除的数叫做质数;否则称为合数。
  • 0和1既不是质数也不是合数,最小的质数是2。

2. 代码和结果

/**
 * @author LanceQ
 * @version 1.0
 * @time 2021/5/19 12:53
 */
public class PrimeNumberDemo {
    public static void main(String[] args) {
        int i=13;
        Boolean b=PrimeNumber1(i);
        System.out.println("初始:"+b);
        Boolean b2=PrimeNumber2(i);
        System.out.println("优化:"+b2);
        Boolean b3=PrimeNumber3(i);
        System.out.println("进一步优化:"+b3);
    }

    private static Boolean PrimeNumber3(int n) {
        if(n<=3){
            return n>1;
        }
        if(n%6!=1&&n%6!=5){
            return false;
        }
        int sqrt= (int) Math.sqrt(n);
        for (int i = 2; i <= sqrt; i++) {
            if(n%i==0){
                return false;
            }
        }
        return true;
    }

    private static Boolean PrimeNumber2(int n) {
        if(n<=3){
            return n>1;
        }
        int sqrt= (int) Math.sqrt(n);
        for (int i = 2; i <= sqrt; i++) {
            if(n%i==0){
                return false;
            }
        }
        return true;
    }

    private static Boolean PrimeNumber1(int i) {
        if(i<=3){
            return i>1;
        }
        for (int j = 2; j < i; j++) {
            if(i%j==0){
                return false;
            }
        }
        return true;
    }

}

运行结果:
初始:true
优化:true
进一步优化:true

执行的方法代码和结果如上:
方法一:

  • PrimeNumber1方法是最直观,对于特殊的数据2、3在一开始进行简单的处理,才进行后面的判断,因为小于等于3的自然数只有2和3是质数。
  • 在后面,我们只需要从2开始,一直到小于其自身,依次判断能否被n整除即可,能够整除则不是质数,否则是质数。

方法二:

  • PrimeNumber2方法,假如n是合数,必然存在非1的两个约数p1和p2,其中p1<=sqrt(n)p2>=sqrt(n)。由此我们可以在方法一的基础上优化循环次数,提高效率。

方法三:

  • PrimeNumber3方法,其实质数还有一个特点,就是它总是等于 6x-1 或者 6x+1,其中 x 是大于等于1的自然数。
  • 所以, 6x 肯定不是质数,因为它能被 6 整除;其次 6x+2 肯定也不是质数,因为它还能被2整除;依次类推,6x+3 肯定能被 3 整除;6x+4 肯定能被 2 整除。那么,就只有 6x+1 和 6x+5可能是质数了。所以只需要在进行循环之前,先进行判断,如果该数对6取模即不等于1也不等于5的话,就一定不是质数,可以直接返回false。

参考::https://blog.csdn.net/afei__/article/details/80638460

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值