找素数的Eratosthenes算法(筛选法)

关于Eratosthenes算法的介绍点击 Eratosthenes 筛选求质数。下面是其代码实现

package day03;

public class TestJava {
	public static void main(String[] args) {
		TestJava java = new TestJava();
		
		//System.out.println(java.power(2, 12));
		//java.hanuota('A', 'B', 'C', 3);
		//System.out.println(java.gcd(12, 36));
		//java.printPrime2(10, 1000);
		java.printPrime(100);
	}
	
	//找出小于n的所有素数,Eratosthenes算法
	public void printPrime(int n) {
		boolean[] primes = new boolean[n + 1];
		for (int i = 0; i < primes.length; i++) {
			primes[i] = true;
		}
		
		for (int i = 2; i <= n / i; i++) {
			if (primes[i]) {
				for (int j = i; j <= n / i; j++) {
					primes[i * j] = false;
				}
			}
		}
		
		int count = 0;
		for (int i = 2; i <= n; i++) {
			if (primes[i]) {
				count++;
				if (count % 10 == 0) {
					System.out.printf("%5d\n", i);
				}
				else {
					System.out.printf("%5d", i);
				}
			}
		}
	}
	
	//找出[m, n)区间的所有素数
	public void printPrime2(int m, int n) {
		if (m < 2 || n <= m) {
			return;
		}
		
		int outputNums = 0;
		for (int i = m; i < n; i++) {
			boolean isPrime = true;
			int endN = (int) Math.sqrt(i);
			for (int k = 2; k <= endN; ++k) {
				if (i % k == 0) {
					isPrime = false;
				}
			}
			
			if (isPrime == true) {
				System.out.print(i + " ");
				if (++outputNums % 10 == 0) {
					System.out.println();
				}
			}
		}
	}
	
	// 最小公约数
	public int gcd(int m, int n) {
		while (n != 0) {
			int r = m % n;
			m = n;
			n = r;
		}
		return m;
	}
	public int gcd2(int m, int n) {
		return n == 0 ? m : gcd2(n, m % n);
	}
	
	// a的n次方
	public int power(int a, int n) {
		if (n <= 0) {
			return 1;
		}
		
		if (n % 2 == 0) {
			return power(a * a, n / 2);
		}
		else {
			return (a * power(a * a, n / 2));
		}
	}
	
	// 汉诺塔问题
	private int i = 1;
	public void hanuota(char a, char b, char c, int n) {
		if (n == 1) {
			System.out.println(this.i++ + ": " + a + "->" + c);
		}
		else {
			hanuota(a, c, b, n - 1);
			System.out.println(this.i++ + ": " + a + "->" + c);
			hanuota(b, a, c, n - 1);
		}
	}
}

你可能感兴趣的:(Java学习)