線性篩2 篩約數個數

2022-05-27 16:39:14 字數 909 閱讀 9921

根據唯一分解定理

\(n = p_1^p_2^...p_q^\)

任意質因子的任意次冪都可以隨意組合, 所以根據乘法原理

\(n\)的約數個數為 \((1+k_1)*(1+k_2)*(1+k_3)*...(1+k_q)\)

so, 可以根據這個線性篩約數個數

首先設 \(num(i)\) 為\(i\) 的 \(k_1\) (也就是最小質因數的指數) \(d(i)\) 為 \(i\) 的約數個數

然後根據線性篩那套理論 分三種情況

​ \(\large i是質數\)

很顯然 $num(i) =2 $ \(d(i) = 2\)

\(i\ \ mod\ \ prime[j]=0\)

說明\(i\) 中有這個質因數,且是\(i\) 的最小質因數

則 \(d(i*prime[j])=(1+k_1+1)*(1+k_2)*(1+k_3)*...(1+k_q)\)

​ \(=d(i)/num(i) * (num(i) +1)\)

\(num(i*prime[j])=num(i)+1\)

\(i\ \ mod\ \ prime[j]!=0\)

說明\(i\) 中沒有這個質因數,且\(prime[j]\) 為\(i*prime[j]\) 的最小質因數

則\(d(i*prime[j])=(1+k_1)*(1+k_2)*(1+k_3)*...(1+k_q)*(1+k_)\)

​ \(=d(i)*(1+k_)\)

​ \(=d(i)*2\)

\(num(i*prime[j])=2\)

這裡由於\(prime[j]\) 是第一次出現 所以是2

數論 線性篩 約數個數與約數和

參考部落格 參考部落格 參考部落格 這個講的挺好 預備知識點 大於1的數n可以分解質因數 n p1a1 p2a2 p3a3 pka n的約數的個數是 a1 1 a2 1 a3 1 ak 1 我們先用線性篩來篩出素數 bool mark maxn int prim maxn int cnt void ...

線性篩素數 尤拉數 莫比烏斯函式 約數個數 約數和

include using namespace std const int n 1e5 10 int tot int mu n 莫比烏斯函式 int phi n 尤拉函式 int prime n vis n int d n 約數個數 int a n 每個數最小因子出現的次數 int sd n sp ...

線性篩素數 尤拉數 莫比烏斯函式 約數個數 約數和

include using namespace std const int n 1e5 10 int tot int mu n 莫比烏斯函式 int phi n 尤拉函式 int prime n vis n int d n 約數個數 int a n 每個數最小因子出現的次數 int sd n sp ...