【Java 判断素数的几个方法】简单理解

最近刷题刷到了包含判断素数问题的题型,这里写篇博客来分享下!

首先我们来讲下什么是素数

1、素数的概念

  • 素数在数学中我们也叫:质数,两个是一个东西
  • 素数:一个大于1的整数,只能被 1 和 自身 整除的的整数,这种整数我们称为:素数,否则称为:合数;例如:2,3,5,7,11,13 都是素数
  • 补充:大于 2 的所有质数都是 奇数

2、方法一

  • 1、我们就是单纯的根据素数概念来判断素数,对于 2 这个素数我们单独判断,例如:判断 5 是否为素数,那我们就根据:5%2,5%3,5%4 求余结果都不为 0 则为素数,否反之亦然。那就是对于给定的大于 2 的自然数,我们用 n%【2,3,…,n-1】判断结果是否为 0 就好
  • 2、 我们再添加一个条件,那就是:大于 2 的所有质数都是 奇数,所以对于从 3 开始每次 +=2 只判断奇数即可

代码:

 public static boolean isPrime(int n){
    
    
        if (n<=3){
    
    
            return n>1;
        }
        for (int i = 2;i<n;i++){
    
    
            if (n%i==0){
    
    //不是素数
                return false;
            }
        }
        return true;
    }

2、方法二

优化

  • 不大于根号n的最大的整数还没有整除n,那么这个n肯定是素数
    说明:如果一个大于根号n的整数m能整除n,那么n/m一定是一个小于根号n的一个整数

代码

 public static boolean isPrime(int n){
    
    
        if (n<=3){
    
    
            return n>1;
        }
        for (int i = 2;i<=Math.sqrt(n);i++){
    
    
            if (n%i==0){
    
    //不是素数
                return false;
            }
        }
        return true;
    }

2、方法三

孪生素数:孪生素数指的是间隔为 2 的相邻素数

  • 1、当 n>=6,n-1 和n+1 为孪生素数,那么 n 一定是6的倍数
  • 2.素数的分布规律:当 n>=5时,如果n为素数,那么 n%6=1∣∣n%6=5,即n一定出现在6x(x≥1)两侧。(就是说大于等于5的素数一定是分布在6倍数的左右两侧,但在6倍数左右两侧的数不一定是素数)

代码:

 public static boolean isP(int num) {
    
    
        if (num <= 3) {
    
    
            return num > 1;
        }
        if (num % 6 != 1 && num % 6 != 5) {
    
    
            return false;
        }
        int sqrt = (int) Math.sqrt(num);
        for (int i = 5; i <= sqrt; i += 6) {
    
    
            if (num % i == 0 || num % (i + 2) == 0) {
    
    
                return false;
            }
        }
        return true;
    }

猜你喜欢

转载自blog.csdn.net/qq_44682003/article/details/112344256