功能:输入一个正整数,按照从小到大的顺序输出它的所有质因子(重复的也要列举)(如180的质因子为2 2 3 3 5 )
数据范围:
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。"); } } }
import java.util.*; public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); int n = in.nextInt(); while(n % 2 == 0){ System.out.print(2+" "); n/=2; } for(int i =3;i<=Math.sqrt(n);i+=2){ while(n%i==0){ System.out.print(i+" "); n/=i; } } if(n>2){ System.out.print(n); } } }
public static void main(String[] args) { Scanner in = new Scanner(System.in); // 注意 hasNext 和 hasNextLine 的区别 long num = in.nextLong(); while (num % 2 == 0) { System.out.print(2 + " "); num = num / 2; } for (int i = 3; i <= Math.sqrt(num); i += 2) { while (num % i == 0) { System.out.print(i + " " ); num = num / i; } } if (num > 2) { System.out.print(num + " "); } }
import java.util.*; public class Main { static PrimeTable primeTable = new PrimeTable(); public static void main(String[] args) { Scanner scanner = new Scanner(System.in); if (!scanner.hasNextInt()) return; int x = scanner.nextInt(); primeTable.updateTo(Math.sqrt(x)); while (x >= 2) { int factor = getMinPrimeFactor(x); System.out.printf("%d ", factor); if (factor == x) return; x /= factor; } } public static int getMinPrimeFactor(int x) { if (primeTable.isPrime(x)) return x; for (int n : primeTable.table) { if (x % n == 0) return n; } return x; } } class PrimeTable { List<Integer> table = new ArrayList<>(); int last; public PrimeTable() { Collections.addAll(table, 2, 3, 5, 7, 11, 13, 17, 19); // *预设值中必须有2 last = table.get(table.size() - 1); } // 增加追加一个质数 public void update() { int candidate = last; while (!isPrime((candidate += 2))) { } last = candidate; table.add(last); } // 追加多个质数到不超过bound public void updateTo(double bound) { while (last < bound) update(); } public boolean isPrime(int x) { if (x < 2) return false; if (x <= last) return table.contains(x); final int sqrt = (int) Math.sqrt(x); if (last >= sqrt) { for (int n : table) if (x % n == 0) return false; return true; } for (int i = last + 2; i <= sqrt; i += 2) { if (x % i == 0) return true; } return false; } }
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); int x=in.nextInt(); if(x==1){ return; } int p=2; while(!isPrime(x)){ while(x%p!=0){ p=nextPrime(p); } System.out.print(p+" "); x/=p; } System.out.print(x); } private static int nextPrime(int curr){ if(curr==2){ curr++; }else{ curr+=2; } while(!isPrime(curr)){ curr+=2; } return curr; } private static boolean isPrime(int x){ for(int i=2;i*i<=x;i++){ if(x%i==0){ return false; } } return true; } }
import java.util.Scanner; // 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); while (in.hasNextInt()) { int target = in.nextInt(); int y = 2; while (target != 1) { if (target % y == 0) { System.out.print(y + " "); target /= y; } else { if (y > target / y) y = target; else y++; } } } } }