题目
参考题解
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
long num = scanner.nextLong();
for (long i = 2; i <= num; ++i) {
while (num % i == 0) {
System.out.print(i + " ");
num /= i;
}
}
System.out.println();
}
}
总结:
1、num % i == 0 表示 num可以整除i
2、没啥说的新思路
long num = 1000;
for (long i = 2; i <= num; i++) {
while (num % i == 0) {
num /= i;
}
}
题解修正
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
long num = scanner.nextLong();
long k = (long) Math.sqrt(num);
for (long i = 2; i <= k; ++i) {
while (num % i == 0) {
System.out.print(i + " ");
num /= i;
}
}
System.out.println(num == 1 ? "" : num);
}
}
总结:
1、数学技巧:没必要循环num次、num取平方根就可以了
2、System.out.println(num == 1 ? "" : num); 1既不是质数也不是合数、输入1没有质数整除就返回本身、过了num平方根以后还没有质数、那就返回它本身
3、 for循环+ while循环组合理解成一把钥匙去开锁、能开再开下一个、打不开就换下一把钥匙
高效题解
import java.util.*;
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String str;
while ((str = br.readLine()) != null) {
int num = Integer.parseInt(str);
long k = (long) Math.sqrt(num);
for (long i = 2; i <= k; ++i) {
while (num % i == 0) {
System.out.print(i + " ");
num /= i;
}
}
System.out.println(num == 1 ? "" : num);
}
}
}
总结:
1、 BufferedReader一替换Scanner瞬间优化20多ms