這幾天研究了之前一直困擾自己很久的莫比烏斯反演,雖然自己現在學的還不是很好,就簡簡單單的寫一下總結吧,咦,都沒學會掌握我就寫總結好像很欠揍,尤拉函式現在也系統的整理一下好了
1.定義:**在數論,對正整數n,尤拉函式是小於n的正整數中與n互質的數的數目(φ(1)=1)。**此函式以其首名研究者尤拉命名(euler』so totient function),它又稱為euler』s totient function、φ函式、尤拉商數等。 例如φ(8)=4,因為1,3,5,7均和8互質。 從尤拉函式引伸出來在環論方面的事實和拉格朗日定理構成了尤拉定理的證明。
設n為正整數,以 φ(n)表示不超過n且與n互素的正整數的個數,稱為n的尤拉函式值
φ:n→n,n→φ(n)稱為尤拉函式。
2.函式內容:
通式:其中p1, p2……pn為x的所有質因數,x是不為0的整數。
至於尤拉函式的一些性質可以見以下部落格:
求逆元的部落格
3.之後給出幾種求尤拉函式的**:(建議看這一篇部落格)
(1)篩法求尤拉函式的**:
//篩法尤拉函式
#include #include #include #include #include using namespace std;
const int n=3e6+10;
int euler[n];
void geteuler()
}if(n>1)
ans -= ans/n;
return ans;
}int main()
for(int j=0; j < tot; j++)
else}}
}int main()
{ int n;
cin>>n;
phi_and_prime_table(n);
cout
以上即尤拉函式的知識點及**模板,接下來開始介紹莫比烏斯反演
1.定理:f(n)和f(n)是定義在非負整數集合上的兩個函式,並且滿足條件
則我們得到結論
其中u(d)為莫比烏斯函式,定義如下:
(1)若 d=1,那麼 u(d)=1
(2)若d=p1p2p3····*pk,pi均為互異素數,則u(d)=(-1)^k
(3)其它情況下 u(d)=0
對於u(d)函式有以下常見的性質:
(1)對任意正整數n 有
(2)對任意正整數n有
2.證明:
3.線性篩選求莫比烏斯函式:
//線性篩求莫比烏斯反演
//#include #include #include #include #include using namespace std;
#define ll long long
const int n=3e6+10;
ll mob[n];
ll vis[n];
ll prime[n];//素數
ll cnt;
void mobius()
{ memset(prime,0,sizeof(prime));
memset(mob,0,sizeof(mob));
memset(vis,0,sizeof(vis));
mob[1] = 1;
cnt = 0;
for(ll i = 2; i >n;
cout嗯 先寫到這,等這幾天自己理解更深刻的時候就回來補充
莫比烏斯函式與莫比烏斯反演
1.1 莫比烏斯函式 莫比烏斯函式可以看做乙個輔助函式,它在莫比烏斯反演公式中用到。1.2 莫比烏斯反演 莫比烏斯反演公式是 根據和函式來求算數函式的乙個公式。1.3 算數函式 所有在正整數上運算的函式稱為算數函式。1.4 和函式 設 f 是算數函式,f 的和函式為n的所有約數的算數函式之和。1.5...
尤拉篩 尤拉函式 莫比烏斯函式
通過已知素數及當前自然數篩掉後面的合數。同時讓每乙個合數只被篩去一次,摒棄重複的篩除操作。兩個陣列 乙個vis,乙個prime。迴圈從2開始,直到所給的上限n處 或者直接maxn 無論當前數是否是質數,都要進行後續合數的處理!篩除時要利用已有的素數。素數規模 趨近於xln x displaystyl...
莫比烏斯反演 二 莫比烏斯反演定理
首先設兩個任意函式f x 和f x 定義運算 f x sum f d 這時就可以用f x 表示f x f 1 f 1 f 2 f 1 f 2 f 3 f 3 f 1 f 4 f 4 f 2 f 1 f 5 f 5 f 1 f 6 f 6 f 3 f 2 f 1 這時可以試著用f x 表示f x f ...