欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Count Primes

程序员文章站 2024-03-15 12:49:17
...

问题描述:


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

Example:

Input: 10
Output: 4
Explanation: There are 4 prime numbers less than 10, they are 2, 3, 5, 7.

简述:

给一个非负整数n,计算小于n的质数个数。

 

解题思路:


质数了解一下:除了1和它自身这两个因数外就再也没有别的因数的数(1不是质数)。

思路1:简单粗暴法,疯狂遍历判断就是了。效率极低,只要提交,必然Time Limit Exceeded。也可能有简单修改,比如将内层循环遍历范围缩小到 Count Primes 或 Count Primes ,但依旧改变不了它慢的本质。

    int countPrimes(int n) {
        if(n<=2) return 0;
        
        int num = 1;
        for(int i=3; i<n; ++i) {
            int j;
            for(j=2; j<i; ++j) {
                if(i%j == 0)
                    break;
            }
            
            if(j==i) 
                ++num;
        }
        
        return num;
    }

 

思路2:广搜。两个因子(>=2)的乘积必然不是质数。利用这一点,通过广搜,可以排除小于n的所有不是质数的数,剩余的即是质数。

    int countPrimes(int n) {
        if(n<=2) return 0;
        
        bool f[n] = {0};
        int num = 0;
        f[0] = f[1] = 1;  
        
        for(long i=2; i<n; ++i) {
            if(!f[i]) ++num;
            for(long j=i; j<n; ++j) {
                if(i*j < n) {
                    f[i*j] = 1;
                } else {
                    break;
                }         
            }
        }
        
        return num;
    }