查找质数的算法优化版

package com.my.testPrimeNumber;
 
import java.util.ArrayList;
import java.util.List;
 
public class PrimeNumber {
 
    
    public boolean isPrimeNum(int n)
    {
        //第一步过滤偶数,使范围减少一半
        if(n==2)
        {
            return true;
        }
        else if(n%2==0)
        {
            return false;
        }
        //处理奇数,一个素数中不会有偶数因子,但是他的平方根的边界可能是偶数,所以边界单独处理
        //这样写,让局部变量的作用域更小,且只计算一次初始化变量
        for(int i=1,sqrt=(int) Math.sqrt(n),borderNumTest = n%sqrt;i<n; i+=2)
        {
            System.out.println(borderNumTest);
            if(borderNumTest==0)    
            {
                return false;
            }
            else if(i!=1 && n%i==0)
            {
                return false;
            }
        }
        
        return true;
    }
    
    public void findPrimeNum(int x)
    {
        List<Integer> ss = new ArrayList<Integer>(2);
        for(int j = 2; j<x;j++)
        {
            if(isPrimeNum(j))
            {
                ss.add(j);
            }
        }
        System.err.println(ss);
        System.err.println(ss.size());
    }
    
    public static void main(String[] args) {
     new PrimeNumber().findPrimeNum(100);
    }
}
 

查找质数的算法优化版,新东西可能有错大家可以自己看看

posted @ 2016-08-28 18:55  牵牛花  阅读(294)  评论(0编辑  收藏  举报