refactor factor_exp