演算法思路
首先先完成線性篩函式,然後改寫
#define max_n 1000
int prime[max_n +5]
=;void
init()
for(
int j =
1; j <= prime[0]
; j++)}
return
;}
然後我們進行**公升級
那對於乙個合數能寫出兩個不互素因數積的情況呢(例如: 12 = 2 * 6 // 2 和 6 不互素) 對於這樣的情況, 我們可以證明 :
我們可以把m (12的合數因子6)寫成對於互素因子的乘積, m * p 等於 n . 我們發現 12 的最小素因子的2次冪比 合數因子6的最小素因子的冪次多1 .也就是說 12 是6再乘上6的最小素因子來的. **因此我們可以定義乙個cnt[i]用來記錄最小素因子的冪次理清思路後,我們用**去實現我們的演算法
#define max_n 1000
int fac[max_n +5]
;//用來儲存數字i的因數個數
int cnt[max_n +5]
;//用來儲存數字i最小素因子的冪次
int prime[max_n +5]
=;void
init()
for(
int j =
1; j <= prime[0]
; j++
)else}}
return
;}
總結 : 利用線性篩演算法框架解決求乙個數的因子個數,它的時間複雜度為 o(n);
思考: 如何利用線性篩框架解決因子和問題,例如 : 4的因子有1,2,4.因此4的因子和為7;
求n 中因子k的個數
思路 求n的階乘某個因子k的個數,如果n比較小,可以直接算出來,但是如果n很大,此時n 超出了資料的表示範圍,這種直接求的方法肯定行不通。其實n 可以表示成統一的方式。n km m a 其中k是該因子,m n k,a是不含因子k的數的乘積 下面推導這個公式 n n n 1 n 2 3 2 1 k 2...
求n個數 1 n 的質因子
求n個數 1 n 的質因子,我用到了素數篩選法的思想,例如找到素數2,2是2,4,6,8,10 的質因子,3是3,6,9,12 的質因子,然後找到素數5,若是求乙個數n的質因子,請參考 include includeint a 10001 20 b 10001 b i 表示第i個數的質因子個數,a ...
寒假安排 求n !中v因子的個數
b 寒假安排 time limit 1000msmemory limit 64000kb64bit io format lld llu submit status practice acdream 1084 description 寒假又快要到了,不過對於lzx來說,頭疼的事又來了,因為眾多的後宮都...