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

本文介绍了判断素数的三种方法,包括基本的遍历法、利用平方根优化以及考虑素数分布规律的优化。通过这些方法,可以更高效地判断一个数是否为素数,减少了计算量,提高了算法效率。代码示例展示了如何实现这些方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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

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;
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值