试题
将大于1的自然数N进行因式分解,满足:
N=а1а2а3…аm且1<а1≤а2≤…≤аm<N
编一程序,输入N(1<N<10^9)
输入要求
N由键盘输入。
输出要求
① 第1行至第M行输出所有的M种方案(顺序不限)
② 第M+1行输出方案总数T。
样例输入
N=12
样例输出
12=26
12=223
12=34
T =3
import java.util.LinkedList;
import java.util.Scanner;
public class Main {
static int M = 0;
static int result = 0;
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner scanner = new Scanner(System.in);
String string = scanner.next();
String subString = string.substring(2);
int n = Integer.valueOf(subString);
M =n;
LinkedList<Integer> list = new LinkedList<>();
dfs(n, list);
System.out.println("T "+"="+(result-1));
}
public static void dfs(int n ,LinkedList<Integer> track)
{
if(n==1) {
result++;
if(track.size()!=1) {
System.out.print(M+"=");
for (int i = 0; i < track.size(); i++) {
int num = track.get(i);
if(i==track.size()-1)
{
System.out.print(num);
}else {
System.out.print(num+"*");
}
}
System.out.println();
}
return;
}
for (int i = 2; i <=n; i++) {
if(n%i==0)
{
int m =(n/i);
if(!judge(i, track))
{
continue;
}
track.add(i);
dfs(m, track);
track.removeLast();
}
}
}
public static boolean judge(int num, LinkedList<Integer> track)
{
boolean flag=true;
for(int x:track)
{
if(num<x)
{
flag=false;
}
}
return flag;
}
}
结果
深度搜索超时,60分。还不知道咋优化,知道的大佬可以留言交流一下。