package mathio;
import java.util.*;
import java.util.concurrent.CopyOnWriteArrayList;
/**
* Math util methods and classes
* @author Gustavo Garsaky
* @version 0.0.1
*/
public class MathUtils {
public PrimeNumbers primeNumbers() {
return new PrimeNumbers();
}
private class PrimeNumbers {
public List<Integer> listPrimesUntil(int limit) {
List<Integer> naturals = new CopyOnWriteArrayList<>();
// init naturals
for(int i=2; i<=limit; i++) {
naturals.add(i);
}
discardMultiples(naturals, getMultiplesOf(current, naturals.size()));
// if discard continue, that means the process should continue
if(discard(current, naturals.size())) {
continue;
} else {
break;
}
}
List<Integer> primes = naturals;
return primes;
}
/**
* check the first natural quad. If it's
* less tan limit, process should continue
* @param firstNatural first natural number
*/
private boolean discard(int firstNatural, int limit) {
double firstNaturalQuad
= Math.
pow(new Double(String.
valueOf(firstNatural
)), 2.0d
); if(firstNaturalQuad <= limit) {
return true;
}
return false;
}
/**
* Get new list of natural numbers. The new list have all numbers
* that not in multiples of first natural number
* @param naturals Naturals numbers
* @param number Number to get multiples
*/
private void discardMultiples(List<Integer> naturals, List<Integer> multiples) {
// check if each multiple is in naturals list.
// if it isn't, append the multiple to new list
for(int i=0; i<multiples.size(); i++) {
for(int k=0; k<naturals.size(); k++) {
if(multiples.get(i) == naturals.get(k)) {
naturals.remove(k);
}
}
}
}
} // end private class
/**
* Get the multiples of a number with some limit
* @param number Number to get multiples
* @param limit of multiples to get
*/
public static List<Integer> getMultiplesOf(int number, int limit) {
List<Integer> multiples = new ArrayList<>();
for(int i=number; i<limit; i++ ) {
if(i < limit) {
multiples.add(number * i);
}
}
return multiples;
}
public static void main
(String[] args
) { PrimeNumbers primeNumbers = new MathUtils().primeNumbers();
List<Integer> primes = primeNumbers.listPrimesUntil(100);
System.
out.
println("<ul class="bbc_list
"><li type="square
"> Listando numeros primos...\n");[/li
][/list
] }
}
}