关于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);
}
}
}