Count the Divisors of a Number in Java


The challenge

Count the number of divisors of a positive integer n.

Random tests go up to n = 500000.

Examples

numberOfDivisors(4)  == 3 // 1, 2, 4
numberOfDivisors(5)  == 2 // 1, 5
numberOfDivisors(12) == 6 // 1, 2, 3, 4, 6, 12
numberOfDivisors(30) == 8 // 1, 2, 3, 5, 6, 10, 15, 30

The solution in Java code

Option 1:

public class FindDivisor {

  public long numberOfDivisors(int n) {
      long counter = 0;
      for(int i=1; i<=n; i++){
          if(n % i == 0){
          counter++;
          }
      }
      return counter;
  }
}

Option 2:

import java.util.stream.IntStream;
public class FindDivisor {
  public long numberOfDivisors(int n) {
    return IntStream.range(1, n+1).filter(i -> n%i==0).count();
  }
}

Option 3:

import java.util.stream.*;

public class FindDivisor {

  public long numberOfDivisors(int n) {
      return IntStream.rangeClosed(1, n).filter(x -> n % x == 0).count();
  }

}

Test cases to validate our solution

import static org.junit.Assert.assertEquals;
import org.junit.Test;

public class DividerTests {

  FindDivisor fd = new FindDivisor();

	@Test
	public void fourTest() {
		assertEquals("Sould return 3 if the parameter equals 4", 3, fd.numberOfDivisors(4));
	}
  
	@Test
	public void fiveTest() {
		assertEquals("Sould return 2 if the parameter equals 5", 2, fd.numberOfDivisors(5));
	}
  
	@Test
	public void twelveTest() {
		assertEquals("Sould return 6 if the parameter equals 12", 6, fd.numberOfDivisors(12));
	}
  
	@Test
	public void thirtyTest() {
		assertEquals("Sould return 8 if the parameter equals 30", 8, fd.numberOfDivisors(30));
	}
}