西格瑪函式 線性篩求約數和

2021-08-19 22:47:33 字數 643 閱讀 3937

解法:待填坑

其實這個完全可以拓展到線性篩求積性函式

因為非完全積 所以在兩數不互質的情況下不可以直接相乘

但是兩數互質的情況下就可以直接相乘

下面需要討論下不互質的情況 我設定乙個陣列min_factory_a表示我這個數的最小質因子乘起來是多少 因為非完全積性,那麼其實我們每次列舉到i%prime[j]==0的時候就是因為這個prime[j](仔細考慮線性篩)的出現會導致答案有所不同 於是我們想辦法把這部分的貢獻都除掉 然後再乘以這部分+新的prime[j]後生成的新的貢獻就可以了

#include

#define n 110000000

int sigma[n],min_factory_a[n],prime[n/10],not_prime[n],n;

int main()

for (int j=1;prime[j]*i

<=n;++j)sigma[i*prime[j]]=sigma[i]*(prime[j]+1);

min_factory_a[i*prime[j]]=prime[j];}}

for (int i=1;i<=n;++i) printf("%d\n",sigma[i]);

return

0;}

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

參考部落格 參考部落格 參考部落格 這個講的挺好 預備知識點 大於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 ...

線性篩2 篩約數個數

根據唯一分解定理 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 的約數個數 然後根據...

約數定理 線性篩素數

約數定理 已知線性篩法打d x 表 每個數都是被它最小的素因子篩掉的,那麼用g i 表示i的最小素因子的冪次,注意d x 的表示式,它是部分積性函式d p1 a1 p2 a2 d p1 a1 d p2 a2 void init 思想證明 理解 中 if i primes j 0 break 的關鍵 ...