天津市城鄉(xiāng)建設(shè)委員會網(wǎng)站百度有幾個總部
目錄
一、題目:
二、思路:
?三、代碼:
?
一、題目:
分解因數(shù)? ? ??《分解因數(shù)》題目鏈接
????????所謂因子分解,就是把給定的正整數(shù)a,分解成若干個素數(shù)的乘積,即 a = a1 × a2 × a3 × ... × an,并且 1 < a1 ≤ a2 ≤ a3 ≤ ... ≤ an。其中a1、a2、...、an均為素數(shù)。 先給出一個整數(shù)a,請輸出分解后的因子。?
輸入描述:
輸入包含多組數(shù)據(jù),每組數(shù)據(jù)包含一個正整數(shù)a(2≤a≤1000000)。輸出描述:
對應(yīng)每組數(shù)據(jù),以“a = a1 * a2 * a3...”的形式輸出因式分解后的結(jié)果。示例1
輸入
1018
輸出
10 = 2 * 518 = 2 * 3 * 3
二、思路:
? ? ? ? 本題是因子分解,但是需要考慮素數(shù)的分解。即:
- 如果是素數(shù):例如 5 = 5
- 如果是合數(shù):例如12 = 2 * 2 * 3?
? ? ? ? ?從i = [ 2 , sqrt(a) ]循環(huán)判斷,如果?i?能被 a?整除,就進入內(nèi)循環(huán)。這個過程類似 《因子個數(shù)》的題。方法思路是一樣的。題目鏈接:因子個數(shù)
具體思路在代碼中。
1、題目要求的輸入輸出
? ? ? ? 因為最后輸出有格式要求,所以我們用 printf 格式化輸出,每個輸出的后面都不一樣,所以用字符串進行后面的顯示。
????????使用 String.join()方法:返回使用指定分隔符拼接后的字符串。傳入的參數(shù)有兩個:分隔符(要以什么符號進行拼接)、需要拼接的字符串的數(shù)組/集合...這里使用List
2、質(zhì)因數(shù)分解
?????????循環(huán)從 2?開始判斷,注意判斷的范圍?i <= Math.sqrt(n)? <--等價于-->?i * i <= n
如果?n =?x * y,那么如果?x <= y ,那么?x?一定在 [ 2 ,?
?]?中。
?三、代碼:
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;/*** Created with IntelliJ IDEA.* Description: 質(zhì)因數(shù)分解* User: WangWZ* Date: 2023-04-12* Time: 16:33*/
public class Main {//質(zhì)因數(shù)分解: 分解 nprivate static ArrayList<String> func(int n) {ArrayList<String> ans = new ArrayList<>();//循環(huán)判斷是否是 n的因子//i <= Math.sqrt(n) 也可以寫成 i * i <= nfor(int i = 2; i <= Math.sqrt(n);i++) {//因為題目中,一個因子可以乘積多次,所以用 while循環(huán)//每循環(huán)一次更新 n 的值,再繼續(xù)找更新后的 n的值的因子while(n % i == 0) {//此時 i 是 n 的一個因子,所以將 i 加入ans//ans 中存儲的是String類型的,而 i是 int類型,所以要進行類型轉(zhuǎn)換//使用String.valueOf(i)ans.add(String.valueOf(i));if(n % 1 == 0) {n = n / i;}}}//判斷 n 的值//如果 n != 1,說明此時 n 是素數(shù),其也是傳入?yún)?shù) n 的一個因子//如果 n == 1,說明上面的循環(huán)已經(jīng)把 傳入?yún)?shù) n的全部因子找到了if(n != 1) {ans.add(String.valueOf(n));}//循環(huán)結(jié)束,返回ansreturn ans;}public static void main(String[] args) {Scanner scanner = new Scanner(System.in);while(scanner.hasNextInt()) {//輸入是數(shù)字int n = scanner.nextInt();//因為最后輸出有格式要求,所以我們用 printf格式化輸出//每個輸出的后面都不一樣,所以用字符串進行后面的顯示//使用 String.join()方法:返回使用指定分隔符拼接后的字符串//傳入的參數(shù)有兩個:分隔符(要以什么符號進行拼接)、需要拼接的字符串的數(shù)組/集合...//這里使用ListList<String> list = func(n);System.out.printf("%d = %s\n",n,String.join(" * ",list));}}
}