Count Primes(LeetCode)

来源:互联网 发布:空中客车a380数据 编辑:程序博客网 时间:2024/05/22 00:28

Description:

Count the number of prime numbers less than a non-negative number, n.

即求小于给定的正整数n的所有素数的个数


方法一:普通求解法,即从2开始判断每一个小于你的正整数k是否是素数,用k依次对2到根号k之间的所有整数取余,如果余数为0则k为非素数,否则为素数

public int countPrimes(int n) {
        // 常规解法,一个个的判断,执行效率低,超时
        if(n < 3)
            return 0;
            
        int count = 0;
        
        int m = 2;
        while(m < n)
        {
            int k = 2;
            int sqrt = (int) Math.sqrt(n);
            while(k <= sqrt)
            {
                if(m % k == 0)
                    break;
                k++;
            }
            
            if(k == sqrt + 1)
                count++;
            
            m++;
        }
    
        return count;    
    }


方法二:以乘法替代除法,依次将2到根号n之间的整数的所有倍数(在小于n的范围内)标记为非素数,剩余的没有被标记的数就全部都是素数了

public int countPrimes(int n) {
        // 新建一个同样大小的数组,记录其是否是素数
        // 注意,2是素数
        boolean[] results = new boolean[n];
        
        for(int i = 2; i * i < n; i++) {
            // 将素数的倍数全部标记为非素数
           if(!results[i]) {  
               for(int j = i; i * j < n; j++) {  
                   results[i * j] = true;  
               }  
           }  
        }  
        
        int count = 0;  
          
        for(int i = 2; i < n; i++) {  
            if(results[i] == false)
                count++;  
        }
        
        return count;  
    }   


方法二没有除法运算,因而执行速度较方法一要快很多

0 0
原创粉丝点击