个人看法,从2开始,比如180中有两个质子2,180/2/2=45,再对3进行同样的步骤,最终得到2 2 3 3 5 

//功能:输入一个正整数,按照从小到大的顺序输出它的所有质因子(重复的也要列举)
//(如180的质因子为2 2 3 3 5 )
//最后一个数后面也要有空格
import java.util.ArrayList;
import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
		Scanner input = new Scanner(System.in);
		while (input.hasNextLong()) {
			long num = input.nextLong();
			ArrayList<Long> zhizi = new ArrayList<>();//存放质子
			for (Long i = 2L; i <= num; i++) {//从2开始,取质子
				int n=0;
				while(num%i==0) {//比如num=100,可取2次2
					n++;
					num = num/i;
				}
				while (n>0) {//填入质子数组中
					zhizi.add(i);
					n--;
				}
			}
			for(Long m : zhizi) {//输出所有质子
			System.out.print(m+" ");
			}
			System.out.println();
			/*Long[] arr = new Long[zhizi.size()];
			zhizi.toArray(arr);
			for (long sum: arr)
			System.out.print(sum+" ");转数组*/
		}

	}

}