package test;
import java.util.Arrays;
public class Prime{
public static boolean[] primeNumber(int num){
if(num < 0){
System.out.println("范围必须大于零");
return null;
}
boolean [] prime = new boolean[num + 1];
prime[1] = false;
Arrays.fill(prime, 2,num + 1,true);
int n = (int)Math.sqrt(num);
for(int i = 1; i < n;i++){
if(prime[i]){
for(int j = 2 * i;j <= num;j += i ){
prime[j] = false;
}
}
}
return prime;
}
public static void showPrime(int num){
boolean [] prime = primeNumber(num);
int n = 0;
if(prime != null){
for(int i = 1; i < prime.length;i++){
if(prime[i]){
System.out.print(i + "\t");
if(++n % 10 == 0){
System.out.println();
}
}
}
}
}
public static void main(String[] args){
int num = 1000000;
long start = System.currentTimeMillis();
showPrime(num);
long end = System.currentTimeMillis();
System.out.println("\n"+(end-start));
}
}
素数:如果一个正整数的因数除了1和它本身,那么该数为素数!
平常解法:用该数n整除2-sqst(n)之间的数,如果不能整除,该数就为素数!
新解法:首先排除1,因为2是素数,把它留下来,然后把后面2的倍数排除,2后面第一个没排除的数3,然后把后面三的倍数排除,3后面第一个没被排除的数是5,把后面5的倍数排除...一直这样下去,就会不超过N的合数排除,只留下素数!