MarcusV(南墙大佬的搬运工)

南墙大佬的CSDN博客地址

导航

Java实现k个数乘(cheng)(自然数的k乘积问题)

k个数乘(cheng)

题目描述
桐桐想把一个自然数N分解成K个大于l的自然数相乘的形式,要求这K个数按从小到大排列,而且除了第K个数之外,前面(K-l)个数是N分解出来的最小自然数。例如:N=24,K=2时,输出为24=2×12,而不是24=4×6;如N=3,K=I时,3=3; N=3,K=2时,输出则为“No answer!”。你能帮助她吗?

输入
第1行:N(2≤N≤107);
第2行:K(1≤K≤100)。

输出
输出样例格式的分解式。

样例输入
24
2
样例输出
24=2*12

import java.util.Scanner;

public class k个数乘2 {
	public static int n = 0, k = 0,count=0;
	public static boolean bool = false;
	public static StringBuilder sb = new StringBuilder("");

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		n = sc.nextInt();
		k = sc.nextInt();
		sb.append(n + "=");
		if(Math.pow(2, k)>n){
			System.out.println("No answer!");
			System.exit(0);
		}
		sc.close();
		StringBuilder sb = new StringBuilder("");
		sb.append(n+"=");
		int m=n;
		
		while(n!=1&&--k>0){
			
			A:for (int i = 2; i <=n; i++) {
				if(n%i==0){
					n/=i;
					sb.append(i+"*");
//					k--;
					break A;
				}
//				if(i==Math.sqrt(m)-2) {
//					System.out.println("asd");
//				}
			}
		}
//		System.out.println(sb);
		if(n!=1){
			sb.append(n);
			
		}
		else{
			sb.deleteCharAt(sb.length()-1);
		}
//		System.out.println(k);
		if(k==0)
			System.out.println(sb);
		else
			System.out.println("No answer!");
//		int [] num = new int [k];
//		for (int i = 0; i < num.length; i++) {
//			num[i]=2;
//			n/=2;
//		}
//		int nums =(int) Math.pow(2, k);
//		int index =k-1;
//		while(n!=1){
////			if(nums/ num[index]++ *num[index]>n)
//		}
		
		
		
	}

}

posted on 2020-03-14 16:59  MarcusV  阅读(36)  评论(0编辑  收藏  举报