import java.util.Scanner; // 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); int num = in.nextInt(); while (num % 2 == 0){ System.out.print(2 + " "); num /= 2; } for(int i = 3;i <= num;){ if(num % i == 0){ System.out.print(i+" "); num /= i; } else{ i += 2; } } } }
import java.util.Scanner; // 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); int limit = in.nextInt(); for (int i = 2; i * i <= limit; i++) { if (limit % i == 0) { limit = limit / i; System.out.print(i + " "); i = i - 1; } } System.out.print(limit); } }
import java.util.*; // 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); int number = in.nextInt(); decompose(number); } public static void decompose(int num) { Map<Integer, Integer> map = new TreeMap<>(); int len = num; // 质因子的范围是2~根号n for(int i = 2; i * i <= len; i++) { while(num % i == 0) { map.put(i, map.getOrDefault(i, 0) + 1); num /= i; } } if(num > 1) { map.put(num, map.getOrDefault(num, 0) + 1); } // 遍历并按照 key 从小到大打印,每个 key 打印 value 次 for (Map.Entry<Integer, Integer> entry : map.entrySet()) { int key = entry.getKey(); int value = entry.getValue(); // 打印 key 对应的 value 次 for (int i = 0; i < value; i++) { System.out.print(key + " "); } } } }
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); long num = scanner.nextLong(); long sqrt = (long)Math.sqrt(num); for (int i = 2; i <= sqrt; i++) { while (num % i == 0) { System.out.print(i + " "); num /= i; } } if (num != 1) { System.out.println(num+" "); } } }
public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); int n = in.nextInt(); int c = n;//存储与n相除后的结果 for (int i = 0; i < n; i++) { if (c % 2 != 0) { break; } c = c / 2; System.out.print(2+" "); } /*----------------------------------------- 求质数 只能被1和它本身整除,其他的能除尽说明不是质数*/ for (int i = 3; i < n; i++) { boolean flag = true;//假设是质数 for (int j = 2; j < i; j++) {//获得2-n内的质数 if (i % j == 0) { flag = false; break; } } if (flag == true) { for (int j = 0; j < n; j++) { if (c % i != 0) { continue; } c /= i; System.out.print(i+" "); } } } //------------------------------------------- } }
根本不需要判断质数。从2一路除上去就可以,合数会被一点一点分解
import java.util.HashSet; import java.util.Scanner; import java.util.Set; import static java.lang.Math.sqrt; // 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main { public static void main(String[] args) { Scanner input = new Scanner(System.in); int num = input.nextInt(); for (int i = 2; i <= num;) { if (num % i == 0) { System.out.print(i + " "); num /= i; continue; } i++; if (i > sqrt(num)) { System.out.print(num); break; } } } }
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); // 提示用户输入一个正整数 System.out.print("请输入一个正整数: "); long num = scanner.nextLong(); // 只有当输入的数字大于1时才进行处理,因为1没有质因数 if (num > 1) { // 找到并打印所有能够整除num的2,然后将num除以2 while (num % 2 == 0) { System.out.print(2 + " "); num /= 2; } // 此时,num必须是奇数。从3开始,我们可以检查奇数因子。 for (long i = 3; i <= Math.sqrt(num); i += 2) { // 当i可以整除num时,打印i并除以i while (num % i == 0) { System.out.print(i + " "); num /= i; } } // 如果在循环结束后,num是一个大于2的质数,则直接打印出来 if (num > 2) { System.out.print(num); } } else { // 如果输入的数不大于1,则提示用户 System.out.println("输入的数必须大于1。"); } } }