java_分解質因數

題目內容:java

每一個非素數(合數)均可以寫成幾個素數(也可稱爲質數)相乘的形式,這幾個素數就都叫作這個合數的質因數。好比,6能夠被分解爲2x3,而24能夠被分解爲2x2x2x3。spa

如今,你的程序要讀入一個[2,100000]範圍內的整數,而後輸出它的質因數分解式;當讀到的就是素數時,輸出它自己。blog

 

輸入格式:內存

一個整數,範圍在[2,100000]內。it

 

輸出格式:class

形如:import

n=axbxcxdueditor

程序

n=nim

全部的符號之間都沒有空格,x是小寫字母x。

 

輸入樣例:

18

 

輸出樣例:

18=2x3x3

 

時間限制:500ms內存限制:32000kb
import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        // TODO Auto-generated method stub        
        Scanner in = new Scanner(System.in);
        
        int n;//輸入整數
        int nCopy;//複製n的值
        int prime=2;//素數,第一個是2
        int count=0;//輸出質因數個數
        
        n=in.nextInt();
        
        if(prime(n)) 
        {
            System.out.printf("%d=%d\n",n,n);//n=n
        }
        else
        {
            System.out.printf("%d=",n);//n=?
            
            nCopy=n;
            
            while(nCopy>1)
            {
                if(nCopy%prime==0)
                {
                    if(count>0)
                    {
                        System.out.print("x");
                    }
                    nCopy=nCopy/prime;
                    System.out.print(prime);
                    count++;
                }
                else
                {
                    prime++;//跳過當前素數
                    prime=nextPrime(prime);//下一個素數
                }
            }
            
            System.out.printf("\n");//換行
            
        }
    }
    
    public static boolean prime(int n)//判斷是否素數
    {
        boolean isPrime=true;//假設n是素數
        if(n==1||(n%2==0&&n!=2))//判斷1和非2偶數
        {
            isPrime=false;
        }
        else if(n==2)//判斷2
        {
            isPrime=true;
        }
        else//判斷其餘
        {
            for(int i=3;i<Math.sqrt(n);i=i+2)
            {
                if(n%i==0)
                {
                    isPrime=false;
                    break;
                }
            }
        }
        
        return isPrime;
    }
    
    public static int nextPrime(int n)//找下一個素數
    {
        while(true)
        {
            if(prime(n))//若是n是素數,返回n
            {
                return n;
            }
            else//若是不是,n自增,再判斷
            {
                n++;
            }
        }
    }
}
 
相關文章
相關標籤/搜索