A naive way of figuring out the number of factors of a particular number is to try every number from 1 up to the number itself.
public ArrayList getFactors(int N) { ArrayList factors = new ArrayList(); for (int i=0; i if (N%i==0) { factors.add(i); } return factors; }
We can do much better than this by noticing that for every number i that is a factor of N; the number N/i is also a factor of N! This means that we can change out O(N) algorithm to O(sqrt(N)) which is much much faster.
public ArrayList getFactors(int N) { ArrayList factors = new ArrayList(); int sqrt = (int) Math.sqrt(N); for (int i=0; i if (N%i==0) { factors.add(i); } if (sqrt * sqrt == N) { factors.add(sqrt); } return factors; }
Save this code somewhere, I guarantee it’ll come in handy!