将正整数n划分成k个不同正整数的乘积,输出所有划分方法

//将正整数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 


猜你喜欢

转载自blog.csdn.net/cs064/article/details/12240179