看了以上所有解答,其实都不完整。 这题要满足的条件有: 1.时间效率 2.超大质数(比如最后一个试验用例是2*10000000007这样的) 主要的点有: 1. 减少循环次数(循环我用+2不是+1,只需要处理一个特殊情况,就是2+2) 2. 当遭遇远大于sqrt(input) 的超大质数时候做一特殊处理分支,即循环a/=i之后,a的最终值如果不是1,则a的最终值就是那个超大质数。 import java.util.Scanner; // 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); String result = ""; // 注意 hasNext 和 hasNextLine 的区别 while (in.hasNextLong()) { // 注意 while 处理多个 case Long a = in.nextLong(); Long b = (long)Math.sqrt(a); for(int i=2;i<= b;i=i+2){ if(i==4){ i=3; } while (a % i == 0){ result= result+i+" "; a/=i; } } if (result.trim() == "" ||result==null) System.out.println(a); else if (a!=1) System.out.println(result+a); else System.out.println(result); } } }