算法学习#2 素数个数统计

题目详情

统计n以内的素数个数
素数:只能被1和自身整除的自然数,0,1除外

输入:100,输出:25
重点考察:埃筛法


Java代码(暴力算法)

public class Solution {
    public int countPrimes(int n) {       
           int count = 0;
           for(int i = 2; i<n: i++){
                //只要是素数count++
                coutn += isPrime(i) ? 1:0;
           }
            return count;

    }
    private int isPrime(int x){
        //只要到根号x就可以停
        for(int i = 2; i * i <= x ; i++){
            if(x % i == 0){
                return 0;
            }
        }
        return 1;
    }
}


Java代码(埃筛法)

素数 非素数(合数)12 = 2 * 6其中2和6称为12的因子,其中两个素数的积为合数

所以我们在每次迭代可以用当前数字筛选出一定为合数的数字,并标记合数,这样只需要判断数组中false的个数就可以判断有多少素数


public class Solution {
    public int countPrimes(int n) {       
        boolean[] isPrime = new boolean[n]; //false代表素数
        int count = 0;
        for(int i = 2 ; i < n; i++){
            if(!isPrime[i]){
                count++;
                for(int j = i * i;j < n; j+=i){
                    isPrime[j] = true;
                }
            }
        } 
        return count;
    }
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 素数筛法,是一种快速“筛”出2~n之间所有素数的方法。朴素的筛法叫埃氏筛(the Sieve ofEratosth...
    Pecco阅读 426评论 0 0
  • 素数,指在大于1的自然数中,除了1和该数自身外,无法被其他自然数整除的数。大于1的自然数若不是素数,则称之为合数。...
    Cache_wood阅读 1,260评论 0 2
  • 什么是素数 素数又称质数,是指大于1的自然数中,除了1和它本身,不能被其它自然数整除的数字。1被定义为非素数。大于...
    程点阅读 7,321评论 1 7
  • RSA是第一个比较完善的公开密钥算法,它既能用于加密,也能用于数字签名。RSA以它的三个发明者Ron Rivest...
    暗物质阅读 1,719评论 0 0
  • 我是黑夜里大雨纷飞的人啊 1 “又到一年六月,有人笑有人哭,有人欢乐有人忧愁,有人惊喜有人失落,有的觉得收获满满有...
    陌忘宇阅读 8,587评论 28 53