数论函数

线性筛:

 

(1) i%prime[i]==0 : i*prime[j]  被  prime[j]  第一次筛到 。

(2)i%prime[j]!=0 :i*prime[j]  被  prime[j]  第一次筛到 。

(3)prime[j]  筛到的  i*prime[j]  都是  i*prime[j]  的最小质因子,且只被筛一次。

 

积性函数线性筛:

(1) 考虑 i=1 和 i 是质数时的函数值。

(2)  i%prime[j]==0 :prime[j] 第一次筛到 i*prime[j] , 此时 i*prime[j] 中 prime[j] 的次幂大于 1 ,考虑如何转移。

(3)  i%prime[j]!=0 :prime[j] 第一次筛到 i*prime[j],此时 i 与 prime[j] 互质,由积性函数直接得出。

保留最小质因子的最高次幂的值 \large low[ i ],则 i 和 prime[j] 不互质时:

    1: i != low[i] :\large f( i * prime[j])=f( i /low[ i ])*f(low[ i ]*prime[j])

    2: i == low[i]:考虑\large f(p^{a-1})\rightarrow f(p^{a})  的转移就比较简单了

:因数\large d\large a次幂 \large d^{a}的和:\large \sum _{d\mid n} d^{a}: 保存每个数的最小质因子的最高次幂 \large c 的值 \large p^{c*a},和此质因子对这个数的贡献 \large \sum_{i=0}^{c} d^{i*a}。考虑如何转移。

莫比乌斯:

\large f(n)=\sum _{d\mid n} g(d) \rightarrow g(n)=\sum _{d\mid n} \mu(d) f(\frac{n}{d})

\large f(n)=\sum _{n\mid d} g(d) \rightarrow g(n)=\sum_{n\mid d} \mu(\frac{d}{n}) f(d)

套路:

 

  \large \left [ \gcd \left ( i ,j \right ) = 1 \right ] \rightarrow \sum_{d\mid \gcd \left ( i ,j \right )}\mu \left ( d \right )                      \large \gcd (i ,j) \rightarrow \sum_{d\mid gcd(i ,j)}\varphi \left ( d \right )

直接枚举 d 或 T=k*d 。

 

公式:

\large \frac{\varphi (n)}{n} = \sum_{d\mid n} \frac{\mu (d)}{d}                   \large \sigma _{0}(i*j)=\sum_{x\mid i}\sum_{y\mid j}[gcd(i ,j)=1]

\large \varphi (i*j)=\varphi (\frac{i}{gcd(i ,j)})\varphi (j)gcd(i ,j)

\large n=\prod _{i=1}^{a}p_{i}^{c_{i}}\rightarrow \varphi (n)=\varphi (\prod _{i=1}^{a}p_{i})\prod _{i=1}^{a}p_{i}^{c_{i}-1}

\varphi (n)=\sum_{d\mid n}(\mu*\varphi)(d)

 

狄利克雷乘积:

\large \mu * I = \epsilon                                \large \varphi * I = id                   \large \mu * id = \varphi

 

杜教筛:

 

要求积性函数 \large f 的前缀和:构造 \large g ,使 \large h =f*g (狄利克雷乘积)

\large S(n)=\sum_{i=1}^{n}f(i),对\large h求和。

可推导:\large g(1)S(n)=\sum_{i=1}^{n}h(i)-\sum_{i=2}^{n}g(i)S(\left \lfloor \frac{n}{i}\right \rfloor)

递归求解,可先筛出前 \large n^{\frac{2}{3}} 个前缀和。

例:

\large f(n)=n^{2}\mu(n)

\large g(n)=n^{2}

则 \large h=f*g   ,有\large h(n)=\sum_{d\mid n}g(\frac{n}{d})f(d)= \sum_{d\mid n}(\frac{n}{d})^{2}d^{2}\mu(d)=n^2\sum_{d\mid n}\mu(d)

 

例:

\large f(n)=n^{2}\varphi(n)

\large g(n)=n^{2}

 

\large h=f*g  ,有\large h(n)=f*g(n)=\sum_{d\mid n}g(\frac{n}{d})f(d)=\sum_{d\mid n}(\frac{n}{d})^{2}d^{2}\varphi(d)=n^{2}\sum_{d\mid n}\varphi(d)

 

Trick:

\large \sum_{d=1}^{n}g(d)\sum_{i =1}^{\left \lfloor \frac{n}{d} \right \rfloor}f(i)\leftrightarrow \sum_{i =1}^{n}f(i)\sum_{d=1}^{\left \lfloor \frac{n}{i} \right \rfloor}g(d)

转换分块(求前缀和)的函数,减少运算。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值