筛选法找最大素数

import java.io.IOException;
import java.util.Scanner;

public class Sieve {
	static Scanner cin = new Scanner(System.in);

	public static void main(String[] args) {
		// We will compute all primes less than the value specified on the
		// command line, or, if no argument, all primes less than 100.
		int max = 100;// assign a default value
		
		if (cin.hasNext())
			max = cin.nextInt();
		// Create an array that specifies whether each number is prime or not
		boolean[] isprime = new boolean[max + 1];
		// Assume that all numbers are primes,until proven otherwise.
		for (int i = 0; i < max; ++i)
			isprime[i] = true;
		// However,we know that 0 and 1 are not primes.Make a note of it.
		isprime[0] = isprime[1] = false;
		// Make sure n less than the square root of max can reduce the loop times.
		int n = (int) Math.ceil(Math.sqrt(max));
		for (int i = 2; i <= n; ++i) {
			if (isprime[i]) {
				for (int j = 2 * i; j <= max; j += i)
					isprime[j] = false;	// j=x*i,so they are not prime.
			}
		}
		int largest;
		// Now go look for the largest prime.
		for (largest = max; !isprime[largest]; --largest)
			;
		// output the result.
		System.out.println("The largest prime less than or equal to " + max
				+ " is " + largest);
	}
}

转载于:https://www.cnblogs.com/Mathida/archive/2011/10/06/2200145.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值