题目描述
将一个正整数N(1<N<32768)分解质因数,把质因数按从小到大的顺序输出。最后输出质因数的个数。
输入
输入描述:
一行,一个正整数
输入样例:
66
输出
输出描述:
两行,第一行为用空格分开的质因数
第二行为质因数的个数
输出样例:
2 3 11
3
HINT:时间限制:1.0s 内存限制:256.0MB
解题思路
首先算出m中的质数加入一个列表n中,然后再依次判断是否为质因数,是的加入到一个新的列表y中,并记录个数,最后输出就行了。注意:最后一个质因数有不加空格。
代码
import java.util.ArrayList;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in); //输入函数
int m=scanner.nextInt(); //调用输入函数
ArrayList<Integer> n=new ArrayList<>(); //记录m内的质数
int x=0; //判断是否为质数的标志
ArrayList<Integer> y=new ArrayList<>(); //记录质因数
int z=0; //记录质因数个数
for(int i=2;i<=m;i++){ //计算m中的质数
for (int j=2;j<i;j++){
if (i%j==0){ //除本身和1能被整除的数
x++;
}
}
if (x==0){
n.add(i); //添加到列表n中
}
x=0; //重置标志
}
for (Integer integer : n) { //依次判断是否能整除
if (m % integer == 0) { //若能
y.add(integer); //加入到列表y
z++; //个数加1
}
}
for (int k1=0;k1<y.size();k1++){ //依次输出质因数
if (k1==y.size()-1){ //若为最后一个不加空格
System.out.print(y.get(y.size()-1));
}else { //其余的加上空格
System.out.print(y.get(k1)+" ");
}
}
System.out.println(); //换行
System.out.println(z); //输出质因数个数
}
}