该题要审清题目,是连续因子,所以说不必要把每个数据的所有因子都求出来,只要找出连续的,不连续便换下一组数据。
import java.util.Scanner;
public class Main {
public static void main(String[] args){
Scanner sc=new Scanner(System.in);
int a=sc.nextInt();
int maxx=0;//标记最大的连续因子
int star=0;//记录连续因子中最小的因子
// for循环进行遍历,找出最长的连续因子串
for(int i=2;i<=Math.sqrt(1.0*a);i++){
if(a%i==0){
int p=a;
int q=i;
int count=0;
while(p%q==0){//此处如果不连续,便退出循环,记录下连续因子个数;
count++;
p/=q;
q++;
}
if(count>maxx){
maxx=count;
star=i;
}
}
}
//System.out.println(maxx+" "+star);
if(maxx==0){
System.out.println("1");//如果该数是一个质数的话,因为没有因子,所以该数为1*n,最长因子串为1;
System.out.println(a);//理论上来说,如果是质数的话,1可以输出的,但题意说1不算在内,所以此处只能输出n;
}
else{
System.out.println(maxx);
for(int i=0;i<maxx;i++){
System.out.print(i+star);
if(i<maxx-1)//如果是最后一个输出的话,就无需输出’*‘啦
System.out.printf("*");
}
}
}
}
该代码可以做出一些优化,在循环遍历完之后,就把i+maxx,假设5*6*7出来之后,i可以直接从八开始判断,不优化也可以,时间优化不大,所以博主在这里就不进行优化了,大家可以自己在下面试一下。