public static List<Integer> generate(int number) {
        List<Integer> factors = new ArrayList<Integer>();

        int factor = 2;
        while (factor <= number) {
            if (isProductWithLastFactorOverflowsFor(number, factors, factor)) {
                break;
            }

            if (isPrimeFactorFor(number, factor)) {
                factors.add(factor);
            }

            factor++;
        }

        return factors;
    }