題目鏈結
給定整數 n(1 ≤ n ≤ 106
10^6
106),試把階乘 n! 分解質因數,按照算術基本定理的形式輸出分解結果中的 p
ip_i
pi 和 c
ic_i
ci 即可。
任何乙個大於 1 的正整數都能唯一分解成有限個質數的乘積,可寫做:
n =p
1c1p
2c2.
..pm
cm
n = p_^p_^...p_^
n=p1c1
p2c
2..
.pmc
m其中 cic_
ci 都是正整數,pip_
pi都是質數,且滿足p
1 <.. . p_1 < p_2 < ... < p_m p1<.. .。試除法: 結合質數判定的「試除法」和質數篩選的「eratosthenes篩法」,我們可以掃瞄 2 ~ ⌊n1 /2 ⌋\lfloor n^ \rfloor ⌊n1/2⌋ 的每個數d,若d能整除n,則從n中除掉所有的因子d,同時累計除去d的個數。 因為乙個合數的因子一定在掃瞄到這個合數之前就從n中被除掉了,所以在上述過程中能整除n的一定是質數,最終就到了質因數分解的結果,易知時間複雜度為o(n 1/2) o(n^) o(n1/2 )。若把1 ~ n每個數都分解質因數,再把結果合併,時間複雜度過高,為o(n n1/2 )o(nn^) o(nn1/ 2),顯然,n !的每個質因子都不會超過n,我們可以先篩選出1~n的每個質數p,然後考慮階乘n !中一共包含多少個質因子p。 n !中質因子p的個數就等於1 ~ n每個數包含質因子p的個數,在1 ~ n中,p的倍數,即至少包含 1 個質因子 p 的顯然有 ⌊n/ p⌋ \lfloor n / p \rfloor ⌊n/p ⌋個,而p 2p ^ 2 p2的倍數,即至少包含兩個質因子p的有⌊n/ p2 ⌋\lfloor n / p ^ 2 \rfloor ⌊n/p2⌋ 個。不過其中的乙個質因子已經在⌊n/ p⌋ \lfloor n / p \rfloor ⌊n/p ⌋裡統計過了,所以只需要在統計第二個質因子,即累加上⌊n/ p2 ⌋\lfloor n / p^2 \rfloor ⌊n/p2⌋ ,而不是2 * ⌊n/ p2 ⌋\lfloor n / p^2 \rfloor ⌊n/p2⌋ 。綜上所述:n !中質因子p的個數為: ⌊ np ⌋+⌊n p2⌋+ ⌊np3 ⌋+.. .+⌊n p⌊lo gpn⌋ ⌋=∑p k≤n⌊ npk⌋ \lfloor \frac \rfloor + \lfloor \frac \rfloor + \lfloor \frac \rfloor + ... + \lfloor \fracn \rfloor}} \rfloor = \sum_ \lfloor \frac \rfloor ⌊pn⌋+ ⌊p2n ⌋+⌊ p3n ⌋+.. .+⌊p ⌊log pn⌋ n⌋= pk≤n ∑⌊p kn⌋ 對於每個p,只需要o(l og2n )o(log_2n) o(log2 n)計算上述和式,故對於整個 n ! 分解質因數複雜度為o(n log2 n) o(nlog_2n) o(nlog 2n) #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include //#pragma gcc optimize(2) using namespace std; typedef long long ll; //cout << fixed << setprecision(2); //cout << setw(2); const int n = 1e6+ 6, m = 1e9+7; bool vis[n] ;int prime[ 200000 ], c[ 200000]; intmain() }for (int i = 0; i < cnt; i++ )for (int i = 0; i < cnt; i++ )return0; } 題意 3101 階乘分解 0x30 數學知識 例題 描述給定整數 n 1 n 10 6 試把階乘 n 分解質因數,按照算術基本定理的形式輸出分解結果中的 p i 和 c i 即可。輸入格式 乙個整數n。輸出格式 n 分解質因數後的結果,共若干行,每行一對pi,ci,表示含有pi ci項。按照pi從小... 時間限制 3000 ms 記憶體限制 65535 kb難度 2 描述 給定兩個數n,m,其中m是乙個素數。將n 0 n 2 31 的階乘分解質因數,求其中有多少個m。注 為求冪符號。輸入 第一行是乙個整數s 0 輸出輸出m的個數 樣例輸入 3 100 5 16 2 1000000000 13 樣例輸... 題目16 將乙個正整數分解質因數。例如 輸入90,列印出90 2 3 3 5。程式分析 對n進行分解質因數,應先找到乙個最小的質數k,然後按下述步驟完 成 1 如果這個質數恰等於n,則說明分解質因數的過程已經結束,列印出即可。2 如果n k,但n能被k整除,則應列印出k的值,並用n除以k的商,作為新...#include
CH3101 階乘質因數分解
階乘質因數分解
質因數分解