import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); long n = sc.nextLong(); for(long i =2;i*i<=n;i++){ while(n%i==0){ System.out.print(i+" "); n = n/i; } } if(n>1){ System.out.print(n); } } }
超时复杂度过大都有可能导致失败。关键点在于,i*i<=n结果也是一样的。如果 n 有一个大于 根号n 的因数,那么它必然有一个小于或等于 根号n 的对应因数。因此,只需要检查到 根号n 就足够了。