//将正整数n划分成k个不同的正整数(不大于max)的乘积,输出所有划分方法,如果不能则输出“无法划分”
public class MultiDivision {
public static boolean multiDivide(int n, int k, int max, int[] buf){
if(max == 0)
return false;
if(k==1)
if(n<=max){
buf[buf.length-k] = n;
for(int i:buf)
System.out.print(i+" ");
System.out.println();
return true;
}else{ //不能划分为k个
return false;
}
boolean flag = false;
for(int factor=max; factor>0; factor--){
if(n%factor == 0){//递归测试该因子是否是结果的一部分
buf[buf.length-k] = factor;
boolean f = multiDivide(n/factor, k-1, factor-1, buf);
flag = flag || f;
}
}
return flag;
}
public static void main(String[] args){
int k=5, n=2015;
int[] buf = new int[k];
if(!multiDivide(n, k, 10, buf)){
System.out.println("无法划分");
}
n = 2016;
if(!multiDivide(n, k, 10, buf)){
System.out.println("无法划分");
}
}
}
无法划分
9 8 7 4 1
8 7 6 3 2