zoukankan      html  css  js  c++  java
  • 积性函数

    一.定义

    什么是积性函数,看 百度百科 还有策爷的博客

    积性函数:对于任意互质的正整数a和b有性质 (f(ab)=f(a)f(b))的数论函数。
    完全积性函数:对于任意正整数a和b有性质(f(ab)=f(a)f(b))的数论函数。

    这里还有一个文档,讲得蛮详细的 线性筛积性函数
    然后这里还有一个博客列举了很多常用的积性函数博客
    2016年国家候选队论文任之洲积性函数求和的几种方法

    对于两个算术函数 (f),(g) ,定义其狄利克雷卷积为 (f*g) ,其中 ((f*g)(n)=sum_{d|n}f(d)*g(frac{n}{d}))
    狄利克雷卷积满足很多性质:
    交换律:(f∗g=g∗f,)
    结合律:(f*(g*h)=(f*g)*h)
    逐点加法的分配律:(f∗(g+h)=f∗g+f∗h)
    (f),(g)是积性函数,那么(f∗g)也是积性函数。
    狄利克雷卷积可以用(O(nlogn))的筛法预处理出来。

    (1(n)) -不变的函数,定义为(1(n)=1)(完全积性)
    (id(n)) -单位函数,定义为(id(n)=n)(完全积性)
    (varepsilon(n)) -定义为:若(n=1)(varepsilon(n)=1);若(n>1)(varepsilon(n)=0)。别称为“对于狄利克雷卷积的乘法单位”(完全积性)
    (sigma_{k}(n))(n)的所有正因子的(k)次幂之和
    (sigma(n)) - (n)的所有质因子之和((sigma_{1}(n))
    (d(n))(n)的正因子个数((sigma_{0}(n))

    因为 (sum_{d|n}mu(d)=[n=1]) ,所以 (1*mu=varepsilon)(由前者证明后者)
    因为 (sum_{d|n}varphi(d)=n) ,所以 (1*varphi=id)(由前者证明后者)
    还有一点,莫比乌斯函数与欧拉函数之间的转化 $$idmu=1varphimu=varepsilonvarphi=varphi$$

    二.线性筛法

    (一)线性筛素数

    (n=p*m=p^prime*m^prime),其中(n)维合数,(p)(n)的最小质因子。那么,$ p<p^prime ( 并且 ) m^prime<m $, (p|m^prime) 所以在筛到(m^prime)的时候,内维的(j)循环还没有到(p^prime)就会被(p)给break掉,在到(m)的时候,(j)(p)后就会筛掉(n),所以这样就保证了每一个数之后被它最小的质因子筛掉。
    例如,在筛24的时候, $ 24 = 3 * 8 = 2 * 12 $ ,那么它就只会被(2 * 12)筛掉

    For (i,2,n) {
    	if (!vis[i]) p[++N]=i;
    	For (j,1,N) {
    		if (i*p[j]>n) break;
    		vis[i*p[j]]=1;
    		if (i%p[j]==0) break;
    	}
    }
    

    (二)欧拉函数

    1.性质

    • (1) (varphi(n))表示(1..n)中与(n)互质的数的个数

    • (2) (varphi(n))为积性函数

    • (3) (varphi(p^{k})=p^{k}-p^{k-1}=(p-1)*p^{k-1})

    • (4) 欧拉定理:(a^{varphi(n)}equiv 1 pmod{n}) 其中((a,n)=1)

    • (5) (sum_{d|n}varphi(d)=n)

    • (6) (n>1)时,(1..n)中与(n)互质的整数之和为(frac{nvarphi(n)}{2})

    2.线性筛欧拉函数

    具体的东西上面那个文档讲得很详细,这里只是补充几点

    需要用到的性质
    (1) (p) 为质数时 (varphi(p)=p-1)
    (2) 若 (n=p*m) 其中 (p)(n) 的最小质因子,如果 (p|m) 那么 (varphi(n)=p*varphi(m))
    (3) 若 (n=p*m) 其中 (p)(n) 的最小质因子,如果 (p ot| m) 那么 (varphi(n)=varphi(p)*varphi(m)=(p-1)*varphi(m))
    这一点根据积性函数性质可以得到

    phi[1]=1;
    For (i,2,n) {
    	if (!vis[i]) {
    		p[++N]=i;
    		phi[i]=i-1;
    	}
    	For (j,1,N) {
    		if (i*p[j]>n) break;
    		vis[i*p[j]]=1;
    		if (i%p[j]==0) {
    			phi[i*p[j]]=p[j]*phi[i];
    			break;
    		}
    		else
    			phi[i*p[j]]=(p[j]-1)*phi[i];
    	}
    }
    

    (三)莫比乌斯函数

    1.性质

    • (n=p_{1}^{k_{1}}*p_{2}^{k_{2}}*...*p_{m}^{k_{m}}),其中 (p) 为素数,那么

    [mu(n)=egin{cases} 1 quadquadquadquad n=1 \\ (-1)^{m} quad prod_{i=1}^{m}k_{i}=1 \\ 0 quadquadquadquad otherwise end{cases}]

    • 莫比乌斯函数是积性函数,即(mu(a)mu(b)=mu(a cdot b))

    • (sum_{d|n} mu(d)=[n=1]) ,这一点根据二项式定理即可证明

    2.线性筛莫比乌斯函数

    需要用到的性质
    根据 (mu) 的性质可以得到,如果 (n=p*m) ,其中 (p)(n) 的质因子,如果 (p|m) 那么显然 (mu(n)=0) ,否则 (mu(n)=-mu(m))

    miu[1]=1;
    For (i,2,n) {
    	if (!vis[i]) {
    		p[++N]=i;
    		miu[i]=-1;
    	}
    	For (j,1,N) {
    		if (i*p[j]>n) break;
    		vis[i*p[j]]=1;
    		if (i%p[j]==0) {
    			miu[i*p[j]]=0;
    			break;
    		}
    		else
    			miu[i*p[j]]=-miu[i];
    	}
    }
    

    (四)约数个数(d(n))

    如果 (d(n))(n) 的约数个数,那么

    [d(nm)=sum_{i|n}sum_{j|m}[gcd(i,j)=1] ]

    (nm=p_{1}^{x_{1}}*...*p_{k}^{x_{k}}),且 (n=p_{1}^{y_{1}}*...*p_{k}^{y_{k}}),那么 (m=p_{1}^{x_{1}-y_{1}}*...*p_{k}^{x_{k}-y_{k}})
    (i=p_{1}^{a_{1}}*...*p_{k}^{a_{k}})(j=p_{1}^{b_{1}}*...*p_{k}^{b_{k}})
    要使得 (gcd(i,j)=1) 必须要 (a_{i}) 或者 (b_{i}) 等于 (0),如果 (a_{i}) 等于 (0),那么 (b_{i}) 共有 (x_{i}-y_{i}+1) 种选择,如果 (b_{i}) 等于(0),那么 (a_{i}) 共有 (y_{i}+1) 种选择,总共 (x_{i}+1) 种,所以满足条件的(i,j)的个数为(prod(x_{i}+1))

    (五)奇葩函数

    1.(f(n)=sum_{d|n}dmu(d))

    [f(n)=sum_{d|n}dmu(d)=prod_{p_{i}}f(p_{i}^{x_{i}})=prod_{p_{i}}(sum_{d|p_{i}^{x_{i}}}dmu(d))=prod_{p_{i}}(1-p_{i}) ]

    f[1]=1;
    For (i,2,maxx) {
    	if (!vis[i]) {
    		p[++N]=i; f[i]=1-i;
    	}
    	For (j,1,N) {
    		int k=i*p[j];
    		if (k>maxx) break;
    		vis[k]=1;
    		if (i%p[j]==0) {
    			f[k]=f[i]; break;
    		}
    		else f[k]=f[i]*(1-p[j]);
    	}
    }
    
  • 相关阅读:
    Android WebView使用
    Android
    Instant Buy Android API Tutorial
    cocos2dx 手势识别
    cocos2d-x 判断两条直线是否相交
    golang 环境bash 以及shell
    技术描述
    golang web开发获取get、post、cookie参数
    Linux curl 模拟form表单提交信息和文件
    Golang HTTP文件上传
  • 原文地址:https://www.cnblogs.com/Wuweizheng/p/8640319.html
Copyright © 2011-2022 走看看