用Java判断素数

目录

题目要求

需求分析

思路整理

代码实现

运行预览


题目要求

判断101-200之间有多少素数,输出这些素数

需求分析

除主方法外,写一个isPrime方法判断是否为素数

思路整理

isPrime方法利用如下方法判断是否为素数:

  • 除2和3之外,所有的素数都可以表示为6n±1的形式(n为自然数)。换句话说,除了2和3,所有的素数在除以6后,余数要么是1,要么是5。
  • 但并不是所有形式为“6n±1”的数都是素数,这个数也可能是6k±1(k为自然数)的倍数。
  • isPrime方法的流程分3步:
    • 是不是2或3?-> 是 -> 返回true
    • 是不是6n±1? -> 否 -> 返回false
    • 是不是合数? -> 否 -> 返回false
    • 返回true

代码实现

public class PrimeNumber {
    public static void main(String[] args) {
        int count = 0;
        for (int i = 101; i <= 200; i++) {
            if (isPrime(i)) {
                System.out.print(i + " ");
                count++;
            }
        }
        System.out.println("\n" + "101-200之间共有" + count + "个素数");
    }

    /**
     * 用于判断一个整数是否为素数
     * @param num 待判断的整数
     * @return 如果num是素数,则返回true;否则返回false。
     *
     * 本方法基于以下原理进行素数判断:
     * 除了2和3以外,所有的素数都可以表示为6n±1的形式,其中n是自然数。
     * 但并不是所有满足6n±1形式的数都是素数,因此需要进行进一步的判断。
     */
    public static boolean isPrime(int num) {
        // 2和3都是素数,直接返回true
        if (num == 2 || num == 3) {
            return true;
        }

        // 首先,对6取余,排除不满足6n±1形式的数
        // 如果num对6取余不等于1且不等于5,那么num不是素数
        // 注意:不能使用if(num%6!=1||num%6!=5),因为这样会使得所有数都满足条件
        if (num % 6 != 1 && num % 6 != 5) {
            return false;
        }

        // 接下来,对num进行循环判断,检查其是否为6k±1的倍数
        // 从5开始,每次增加6,i表示6n-1形式的数,i+2表示6n+1形式的数
        // 如果num能被i或i+2整除,则num不是素数
        // 只需要检查到num的平方根即可,因为一个大于平方根的因子必然与一个小于平方根的因子配对
        for (int i = 5; i <= Math.sqrt(num); i += 6) {
            if (num % i == 0 || num % (i + 2) == 0) {
                return false;
            }
        }

        return true;
    }
}

运行预览


以上即为利用java实现素数判断的代码,如有任何错漏、不足、可简化提升之处,敬请批评指正!

2024年4月7日

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值