題目:
將一個正整數分解質因數。
例如:輸入90,打印出90=233*5。
程序分析:
對n進行分解質因數,應先找到一個最小的質數k,然后按下述步驟完成:
(1)如果這個質數恰等于n,則說明分解質因數的過程已經結束,打印出即可。
(2)如果n<>k,但n能被k整除,則應打印出k的值,并用n除以k的商,作為新的正整數n,重復執行第一步。
(3)如果n不能被k整除,則用k+1作為k的值,重復執行第一步。
方法一程序代碼:
package com.ljy.tencent;
import java.util.Scanner;
/**
* 題目:將一個正整數分解質因數。例如:輸入90,打印出90=2*3*3*5。
* 程序分析:對n進行分解質因數,應先找到一個最小的質數k,然后按下述步驟完成:
* (1)如果這個質數恰等于n,則說明分解質因數的過程已經結束,打印出即可。
* (2)如果n<>k,但n能被k整除,則應打印出k的值,并用n除以k的商,作為新的正整數n,重復執行第一步。
* (3)如果n不能被k整除,則用k+1作為k的值,重復執行第一步。
* @author liaojianya
* 2016年10月2日
*/
public class QualityFactorsDecompose
{
public static void main(String[] args)
{
System.out.println("請輸入需要分解的正整數:");
Scanner input = new Scanner(System.in);
int n = input.nextInt();
System.out.println(n + "分解質因數如下:");
System.out.print(n + "=");
deposition(n);
input.close();
}
public static void deposition(int n)
{
//判斷該數是否為1,若是,直接打印。
if(n == 1)
{
System.out.println(n);
}
else
{
for (int i = 2; i <= n; i++)
{
//如果n能夠被從2開始的i整除,則i即為n的最小質數。
if (n % i == 0)
{ //如果此時n == i說明n的最小質數即為本身
if (i == n)
{
System.out.print(i);
break;
}
else
{
System.out.print(i + "*");
//使用迭代尋找商的最小質數。
deposition(n / i);
break;
}
}
}
}
}
}
結果輸出:
請輸入需要分解的正整數:
20
20分解質因數如下:
20=2*2*5
方法二程序代碼:
package com.ljy.tencent;
import java.util.Scanner;
/**
* 不適用迭代的方法
* @author liaojianya
* 2016年10月2日
*/
public class Test1{
public static void main(String[] args)
{
System.out.println("請輸入需要分解的正整數:");
Scanner input = new Scanner(System.in);
int n = input.nextInt();
System.out.println(n + "分解質因數如下:");
deposition(n);
input.close();
}
private static void deposition(int n){
System.out.print(n+"=");
for(int i=2;i<n+1;i++){
while(n%i==0 && n!=i){
n/=i;
System.out.print(i+"*");
}
if(n==i){
System.out.println(i);
break;
}
}
}
}