HashTable-----204. Count Primes

来源:互联网 发布:长沙java招聘信息 编辑:程序博客网 时间:2024/06/05 14:39

原题目
维基百科筛选法
参考资料

求素数是经常碰到的问题了,显然我们要使用高效的线性算法—-筛选法。但是这个过程中要注意的一点是再乘积的过程中溢出。(题目给的数字较大的情况下)

public int countPrimes(int n){    int result=0;    if(n<=0){        return result;    }    boolean[] book=new boolean [n+1];    for(int i=2;i<n+1;i++){        //假如是素数就把这个素数用来乘积        if(book[i]==false){            result++;            for(int j=2;j*i<n;j++){                book[j*i]=true;            }        }    }     return result;}

1不是质数

错误的代码

  public int countPrimes(int n) {        int result = 0;        if (n <= 0) {            return result;        }        long[] nums = new long[n + 1];        for (int i = 2; i < nums.length; i++) {        //这里的乘法会溢出            for (int j = i * i; j < nums.length; j += i) {                nums[j] = 1;            }        }        int counter = 0;        for (int i = 1; i < nums.length; i++) {            if (nums[i] != 1) {                counter++;            } else {                System.out.println(i);            }        }        return counter;    }
原创粉丝点击