前置芝士
极高的数学造诣与不怕劳累的精神html
占坑,待重写函数
正文
咱们能够很是轻易地手动模拟出${f(n)}$与${g(d)}$的关系url
$${f(1)=g(1)}$$spa
$${f(2)=g(1)+g(2)}$$.net
$${...}$$code
$${f(6)=g(1)+g(2)+g(3)+g(6)}$$htm
与此同时,咱们也同样可以从${f(n)}$逆推到${g(d)}$blog
$${g(1)=f(1)}$$get
$${g(2)=f(2)-f(1)}$$数学
$${...}$$
$${g(6)=f(6)-f(3)-f(2)+f(1)}$$
咱们会发现,这样的一个式子,并无从${f(n)}$到${g(d)}$那么和谐,而是有加有减,彷佛不太好处理。
$${g(n)=\sum_{d|n}^{}}f(d)*? $$
咱们会发现,每个${g(n)}$都是由上面这样一个式子推出来的,只不过还多了一个系数
而后咱们就要引入一个新的东西
莫比乌斯函数
莫比乌斯函数是一个颇有趣的函数,其中有不少很优美,咱们也特别喜欢的性质
性质1:莫比乌斯函数是一个积性函数
这个东西应该没什么好说的,本身带一带,YY一下就能出来~~(实际上是我本身懒得证实啦QAQ)~~
这对咱们有什么好处呢?
还记得欧拉函数${\varphi (n)}$吗
因此一样,咱们也能够用线性筛来求解莫比乌斯函数
第一种求法:利用定义来求莫比乌斯函数
贴代码吧,自行理解
void mobius() { for(int i=1;i<=maxn;++i) miu[i]=1; for(int i=2;i<=maxn;++i) { if(!vis[i]) { miu[i]=-1; for(int j=i+i;j<=maxn;j+=i) { vis[j]=1; if((j/i)%i==0) miu[j]=0; else miu[j]*=-1; } } } }
第二种求法:利用积性函数的性质来求莫比乌斯函数
楼主很懒,什么也没有留下
性质2:对于任意正整数n,有 $$ {\sum_{d|n}} \mu(d) \left{\begin{matrix} 1,n=1\ 0,n>1 \end{matrix}\right. $$
这两个性质真是太美妙了不是吗
回到正题,上文咱们获得
$${g(n)=\sum_{d|n}^{}}f(d)*? $$
继续观察,咱们能够发现
${f(1)}$的符号并非惟一肯定的(观察${g(1)andg(6)}$)
因而咱们能够猜测,前面的系数与${\frac{n}{d}}$有关
因此咱们能够猜测获得
$${{g(n)=\sum_{d|n}^{}}f(d)*\mu (\frac{n}{d})} $$
而后再代换一下,获得
$${{g(n)=\sum_{d|n}^{}}f(\frac{n}{d})*\mu (d)} $$
既然是猜测,天然须要证实
首先咱们能够把${f(\frac{n}{d})}$换出来
就能够获得 $${\sum_{d|n}^{}}(\mu (d)*\sum_{i|\frac{n}{d}}^{}g(i))$$
而后咱们能够发现其实就是要知足
$${d*i|n}$$
也能够这么理解,对于每个二元组:
$${(\mu (d),g(i))}$$
只须要保证每个这样的二元组都可以被枚举到就行了
因此这个式子就能够变换为
$${\sum_{i|n}^{}}(g(i)\sum_{id|n}^{}\mu(d))$$
若是实在不理解能够带一个具体值进去手动模拟一下,可能就茅塞顿开了
而后咱们能够再代换一下
就变成了
$${\sum_{i|n}^{}}(g(i)*\sum_{d|\frac{n}{i}}^{}\mu(d))$$
看看后面的这一块,有没有想到咱们美妙的性质1啊?
当${i=n}$时,显然${\sum_{d|\frac{n}{i}}^{}\mu(d)}=$${\sum_{d|1}^{}\mu(d)}=1$
当${i\neq n}$时,显然${\frac{n}{i}>0}$,故此时这里就能够证得
$${{g(n)=\sum_{d|n}^{}}f(\frac{n}{d})*\mu (d)} $$
完结撒花!!!
Upd:
莫比乌斯反演的另外一种基本形式 $${{g(n)=\sum_{n|d}^{}}f(d)*\mu (\frac{d}{n})} $$
也能够用上述相似的方法证实获得