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); } }
查找质数的算法优化版,新东西可能有错大家可以自己看看