自變數對於定義域為數論函式或算術函式,在不說明定義域時預設為
則稱數論函式
為積性函式.
如果對於任意
也滿足
,則稱數論函式
為完全積性函式.
有一些常見的積性函式:
兩個數論函式的狄利克雷卷積定義為:
狄利克雷卷積滿足常見的運算律:
並且有
作為狄利克雷卷積的單位元,對於任意數論函式
有 類似埃氏篩,用質數來標記合數,且讓每個合數僅被自己的最小質因子標記一次,複雜度達到
此**求出了
範圍內的質數:
for(int i(2);imaxn)break;
vis[prime[j]*i]=true;
}}
利用這種思路,結合
的性質即可篩出
範圍內的
:
for(int i(2);imaxn)break;
vis[prime[j]*i]=true;
if(i%prime[j])mu[i*prime[j]]=-mu[i];
else
}}
顯然 為質數時,
根據唯一分解定理可以將整數分解為質數冪次的乘積,有一結論,若
,那麼
考慮線性篩的過程,設乙個數
的最小質因子為
篩去,設
若 ,那麼
包含了
的所有質因子,於是有:
若 ,那麼
與 互質,根據尤拉函式的積性有:
**:
for(int i(2);imaxn)break;
vis[prime[j]*i]=true;
if(i%prime[j])phi[i*prime[j]]=phi[i]*(prime[j]-1);
else
}}
對於數論函式
,求 考慮構造
與 的關係.
對於任意數論函式
,有:證明,考慮轉化為列舉
和 得到杜教篩的核心式子:
只要能找到合適的數論函式
,結合數論分塊就可以利用遞迴快速計算
複雜度
,線性篩預處理前
項的字首和能做到
計算 :
就可以很簡單地寫成**,注意**用到了
預處理前面的字首和和
進行記憶化來優化:
int summu(int x)
return ans;
}
莫比烏斯函式
問題描述 莫比烏斯函式,數論函式,由德國數學家和天文學家莫比烏斯 m?bius 1790 1868 提出。梅滕斯 mertens 首先使用 n 作為莫比烏斯函式的記號。而據說,高斯 gauss 比莫比烏斯早三十年就曾考慮過這個函式。莫比烏斯函式在數論中有著廣泛應用。莫比烏斯函式完整定義的通俗表達 1...
莫比烏斯函式
問題描述 莫比烏斯函式,數論函式,由德國數學家和天文學家莫比烏斯 m bius 1790 1868 提出。梅滕斯 mertens 首先使用 n 作為莫比烏斯函式的記號。而據說,高斯 gauss 比莫比烏斯早三十年就曾考慮過這個函式。莫比烏斯函式在數論中有著廣泛應用。莫比烏斯函式完整定義的通俗表達 1...
莫比烏斯函式
莫比烏斯函式數學定義 通俗表達 1 莫比烏斯函式 n 的定義域是n n為自然數集 2 1 1 3 當n存在平方因子時,n 0 例如4,9,16即為平方因子 4 當n是素數或奇數個不同素數之積時,n 1 5 當n是偶數個不同素數之積時,n 1 例題 根據定義模擬過程 1 include2 includ...