首页 > 试题广场 >

分解因数

[编程题]分解因数
  • 热度指数:9201 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
所谓因子分解,就是把给定的正整数a,分解成若干个素数的乘积,即 a = a1 × a2 × a3 × ... × an,并且 1 < a1 ≤ a2 ≤ a3 ≤ ... ≤ an。其中a1、a2、...、an均为素数。 先给出一个整数a,请输出分解后的因子。

输入描述:
输入包含多组数据,每组数据包含一个正整数a(2≤a≤1000000)。


输出描述:
对应每组数据,以“a = a1 * a2 * a3...”的形式输出因式分解后的结果。
示例1

输入

10<br/>18

输出

10 = 2 * 5<br/>18 = 2 * 3 * 3
import java.util.*;

public class Main{
    
    public static void getPrimeNum(ArrayList<Integer> list,int n){
        for(int i = 2; i <= Math.sqrt(n); i++){
            if(n % i == 0){
                while(n % i == 0){
                    list.add(i);
                    n = n / i;
                }
            }
        }
        //素数的情况
        if(n != 1){
            list.add(n);
        }
    }
    
    public static void main(String[] args){
        Scanner scan = new Scanner(System.in);
        while(scan.hasNext()){
            int a = scan.nextInt();
            ArrayList<Integer> list = new ArrayList<>();
            getPrimeNum(list,a);
            System.out.printf("%d = ",a);
            System.out.printf("%d",list.get(0));
            for(int i = 1; i < list.size(); i++){
                System.out.printf(" * %d",list.get(i));
            }
            System.out.println();
        }
    }
}

发表于 2023-02-14 14:40:18 回复(0)
import java.util.*;
import java.math.*;
public class Main{
    public static List<String> fun(int n){
          List<String> list = new ArrayList<>();
           for(int i = 2;i <= Math.sqrt(n);i++){
               while(n % i == 0){
                     list.add(String.valueOf(i));
                     n /= i;
               }
           }
           if(n != 1){
               list.add(String.valueOf(n));
           }
           return list;
    }
   public static void main(String[] args){
       Scanner sc = new Scanner(System.in);
      while(sc.hasNext()){
           int n = sc.nextInt();
            List<String> list  = fun(n);
           System.out.printf("%d = %s\n",n,String.join(" * ",list));
       }
     
   }
}

发表于 2022-05-12 14:57:55 回复(3)
import java.util.Scanner;
public class Main {
public static void main(String[] args) { 
Scanner scanner=new Scanner(System.in);
while (scanner.hasNext()) {
int n=scanner.nextInt();
resolvePrime(n);
    }  
    public static void resolvePrime(int num) {  
    System.out.print(num+"= ");
        int i = 2; 
        int sum=1;
        int num1=num;
        while (i <=num) {  
            if (num % i == 0) {  
                sum*=i;
                if (sum!=num1) {
                System.out.print(i+"*");
}
                else {
System.out.print(i);
break;
}
                num = num / i;
                i = 2;  
            } else { 
                i++;  
            }  
        }  
    }  
}  
运行超时呢。。。。求如何改进代码
发表于 2017-05-11 12:29:52 回复(0)