題目內容:java
每一個非素數(合數)均可以寫成幾個素數(也可稱爲質數)相乘的形式,這幾個素數就都叫作這個合數的質因數。好比,6能夠被分解爲2x3,而24能夠被分解爲2x2x2x3。spa
如今,你的程序要讀入一個[2,100000]範圍內的整數,而後輸出它的質因數分解式;當讀到的就是素數時,輸出它自己。blog
輸入格式:內存
一個整數,範圍在[2,100000]內。it
輸出格式:class
形如:import
n=axbxcxdueditor
或程序
n=nim
全部的符號之間都沒有空格,x是小寫字母x。
輸入樣例:
18
輸出樣例:
18=2x3x3
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++; } } } }