【Java】P1075 質因數分解—關于數學方法在解題中的運用—(OJ:洛谷)
題目
題目來源:洛谷OJ
題目連結:
https://www.luogu.com.cn/
題目描述
已知正整數n是兩個不同的質數的乘積,試求出兩者中較大的那個質數。
輸入格式
一個正整數n。
輸出格式
一個正整數p,即較大的那個質數。
輸入輸出樣例
輸入 #1複制
21
輸出 #1複制
7
說明/提示
n ≤ 2 × 109
NOIP 2012 普及組 第一題
思路
第一眼閱讀完題目會感覺這個題很複雜,不但要判斷質因數,還要應付龐大的資料範圍。
質因數(素因數或質因子)在數論裡是指能整除給定正整數的質數。除了1以外,兩個沒有其他共同質因子的正整數稱為互質。因為1沒有質因子,1與任何正整數(包括1本身)都是互質。正整數的因數分解可将正整數表示為一連串的質因子相乘,質因子如重複可以用指數表示。根據算術基本定理,任何正整數皆有獨一無二的質因子分解式 [1] 。隻有一個質因子的正整數為質數。(百度百科)
但是,用過質因數的定義,我們可以聯想到唯一分解定理。
算術基本定理可表述為:任何一個大于1的自然數 N,如果N不為質數,那麼N可以唯一分解成有限個質數的乘積 N = P 1 a 1 P 2 a 2 . . . . . . P n a n \N={P_1^{a_1}}{P_2^{a_2}}......{P_n^{a_n}} N=P1a1P2a2......Pnan,這裡P1<P2<P3…<Pn均為質數,其中指數ai是正整數。這樣的分解稱為 N 的标準分解式。(百度百科)
剩下的就簡單了,直接用輸入的數對i(i = 2, 3 ,4 ,5 ,…)求餘,倘若餘數為0,則n / i 的就是答案。
Java源代碼
package 入門3循環結構;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.io.StreamTokenizer;
/**
*@Title P1075質因數分解.java
*@description TODO
*@time 2020年7月17日
*@author Baisu
*@version 1.0
*/
public class P1075質因數分解 {
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StreamTokenizer st = new StreamTokenizer(br);
PrintWriter pr = new PrintWriter(new BufferedWriter(new OutputStreamWriter(System.out)));
st.nextToken();
int n = (int) st.nval;
for(int i=2; i<n; ++i) {
if(n%i==0) {
pr.println(n/i);
break;
}
}
pr.flush();
}
}