LeetCode:计算素数

这篇博客介绍了如何使用埃拉托斯特尼筛法来统计小于非负整数n的所有质数数量。代码示例展示了从2开始遍历并标记合数的过程,最终返回质数计数。

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

LeetCode:计算素数

统计所有小于非负整数 n 的质数的数量

埃拉托斯特尼筛法(埃氏筛):要得到自然数n以内的全部素数,必须把不大于根号n的所有素数的倍数剔除,剩下的就是素数

public static Integer getPrimeNumberCounts(int n){
        Integer counts = 0;
        // 初始化数组全为false
        boolean[] booleans = new boolean[n];
        // 从2开始,将所有数的X倍标记为合数(因为是X倍,所以必然存在因数:x、本身、1)
        for(int i=2;i * i< n;i++){
            // I的倍数从本身开始即可,因为比他小的倍数会在之前算过,如2*3 3*2 要直接从3*3开始
            int x = i;
            // I的X倍需要小于n,因为超过N时就不在该数组范围内,计数超额
            while (i * x < n){
                // 因为是X倍,所以必然存在因数:X和本身、1
                // 将合数标记为true
                booleans[i*x] = true;
                x++;
            }
        }
        // 注意数组从2开始计算
        for(int y = 2; y<n;y++){
            if(!booleans[y]){
                counts++;
            }
        }
        return counts;
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值