求质数

164 阅读1分钟

单线程:

//tally:质数数量\耗时----9593\1200///////78499\86722
    private static void countPrimes(int num) {
        int tally=0;
        for(int i=1;i<=num;i++){
            if(isP(i)){
                tally++;
                //System.out.println(i);
            }


        }
        System.out.println("tally:"+tally);
    }

    private static boolean isP(int num) {
        for(int i=2;i<num;i++){
            if(num%i==0)
                return false;
        }
        return true;
    }
多线程要快很多,使用lambda方式更容易实现多线程。

同时使用lambda表达式另一个好处是更容易实现SOLID中单一功能原则。每一个方法或类实现单一的功能。逻辑显得更加清晰。
    //lambda 78499\23548
    private static long countPrimes1(int num) {
        return IntStream.range(1,num)
               //去掉parallel()就是单线程运行。
                .parallel()
                .filter(n->isP(n))
                .count();

    }