leetcode 题解 Count Primes

题目描述:Count the number of prime numbers less than a non-negative number, n.

我的反应就是写一个判别素数的方法,然后从1开始遍历并判断,代码如下(知道效率会很低但是没想到其他方法):

public static int countPrimes(int n) {
        if(n < 3)
        	return 0;
        int count = 0;
        for(int i = n; i > 1; i--){
        	if(isPrimes(i))
        		count++;
        }
        return count;
    }
	private static boolean isPrimes(int n){
		int k = (int)Math.sqrt(n);
		for(int i = 2; i <= k; i++){
			if(n%i==0)
				return false;
		}
		return true;
	}

运行时在输入数据位1500000时超时了,我后来在自己电脑上测试估计运行了1s多。

后来在看讨论区时发现了一个我觉得挺牛逼的代码:

public static int countPrimes(int n) {
       boolean[] m = new boolean[n];
       int count = 0;
       for (int i=2; i<n; i++) {
           if (m[i])
               continue;

           count++;
           for (int j=i; j<n; j=j+i)
               m[j] = true;
       }

       return count;
   }

正好是用了归纳的思想来判别素数,真的挺精彩的。瞬间感觉自己高中搞过的数学竞赛都白学了!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值