Leetcode 204. 计数质数

该博客探讨了LeetCode 204题的解决方案,即如何高效地计算小于给定非负整数n的质数数量。文章详细分析了判断质数的传统方法及其时间复杂度问题,并提出了一种优化策略,通过将数表示为6的倍数加减k的形式,减少判断的数字范围,进一步优化了算法。最终实现的时间复杂度为O(ln(n)ln(n)),显著提高了运行效率。
摘要由CSDN通过智能技术生成
题目

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

示例:

输入: 10
输出: 4
解释: 小于 10 的质数一共有 4 个, 它们是 2, 3, 5, 7 。

解法&思路

题目内容很简单,但是里面要掌握的知识点非常多。最优解法非常的巧妙。

  • 何谓质数。一个数除了1和它本身能够整除它,其它数都不能够整除它。这个可以肯定,大于它的数更加不能整除它。那么我们可以据
  • 何谓整除;假设2个正整数M,N,M>N;M/N没有余数,即M是N的整数倍。
    如果我们按照定义的方法来判断一个数是否为质数,那么这个方法的计算量非常庞大,比如计算2^23-1是否是质数,需要判断20亿个数。
    我刚开始的解法是:
public int countPrimes(int n) {
        //int loopend = (int)Math.sqrt(n);
        //List<Integer> pure = new LinkedList<Integer>();
        Queue<Integer> pure= new LinkedList<>();
        for(int i = 2;i < n ; i++){
            boolean isPure = true;
            Iterator<Integer> it = pure.iterator();
            while (it.hasNext()){
                int pre_pure = it.next();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值