public static List<Integer> divisors(final int n) {
        notZeroCheck(n);
        if (n < 0)
            return divisors(-n);
        
        final List<Integer> divisors = new ArrayList<>();
        divisors.add(1);
        if (n == 1)
            return divisors;
        
        if (!isPrime(n)) {
            int i = 2;
            int increment = 1;
            if (n % 2 == 1) {
                i = 3;
                increment = 2; // test odd ones only
            }
            
            for (; i <= n/2; i += increment) {
                if (n % i == 0)
                    divisors.add(i);
            }
        }
        divisors.add(n);
        return divisors;
    }