判断是否为素数的另一种解法

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的合数排除,只留下素数!



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值