数论函数

基本定义直接上图
还有神奇教学网站 莫比乌斯反演入门欧拉反演orz

上图中k的含义:将n分解\(n = {p_1}^{a_1}{p_2}^{a_2}...{p_k}^{a_k}\) n的所有因子中,有r个质因子的方案数为C(r,k),\(\therefore \mu = (-1)^rC(r,k)\)

\(\sum_{i=1}^{n}\lfloor\frac{n}{i}\rfloor\)

题意

整除分块模板,


题解

注意到\(\lfloor\frac{n}{i}\rfloor\)只有\(\sqrt{n}\)种取值。
求和时我们从小到大枚举每次使\(\lfloor\frac{n}{i}\rfloor\)变化的i即可,
如何枚举?注意到r=n/i是连续\(\lfloor\frac{n}{i}\rfloor\)串以i结尾的最后一个数的位置(数组下标从1开始),
所以下一个l=r+1;而这个区间内\(\lfloor\frac{n}{i}\rfloor\)的值就是n/l。
另外有性质:
\(\lfloor\frac{\lfloor\frac{n}{a}\rfloor}{b}\rfloor = \lfloor\frac{n}{ab}\rfloor\)

\(\lceil\frac{\lceil\frac{n}{a}\rceil}{b}\rceil = \lceil\frac{n}{ab}\rceil\)


代码

for(int l=1,r;l<=n;l=r+1)
{
    r=n/(n/l);
    ans+=(r-l+1)*(n/l);
}

//整除分块向上取整题[gym101485]Debugging  
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int nmax=1e6+100;
ll dp[nmax];
const ll inf=1e15;

ll dfs(ll n,ll R,ll P){
    if(n<=1)    return 0;
    if(dp[n])   return dp[n];
    dp[n]=(n-1)*P+R;
    for(int l=2,r;l<=(n-1);l=r+1){
        //每组l-r个,组数均为n/l
        r=(n-1)/((n-1)/l);
        /*
            空格要填上n/l个,无论是除的尽除不尽。
            8对于l=3:00100100
                 r=4:00010001
                 要填的空格数=组数 8/3=8/4
        */
        ll tt=dfs(l-1,R,P)+R+((n-1)/l)*P;
        dp[n]=min(dp[n],tt);
    }
    return dp[n];
}
int main(){
    ll n,r,p;
    scanf("%I64d%I64d%I64d",&n,&r,&p);
    printf("%I64d\n",dfs(n,r,p));
    return 0;
}

HDU5528 Count a * b (2015长春B )

题意


题解

数论函数进阶题。

涉及迪利克雷卷积的一些推导。


代码

//头文件省略



心路历程

orz数论大佬
先挖坑

bzoj2820 P2257 YY的GCD

题意

\(\sum\limits ^{n}_{i=1}\sum\limits ^{m}_{j=1}[ gcd( i,j) =p]\)


题解

不能再用入门篇中解\(\sum\limits ^{n}_{i=1}\sum\limits ^{n}_{j=1}[ gcd( i,j) =p]\) 时的 $\phi $前缀和.
考虑算 \(\sum\limits ^{n}_{i=1}\sum\limits ^{m}_{j=1} gcd( i,j) *2-1\) 时的容斥。
当时用的是\(f[x]=(n/x)*(m/x)-Σ(2*x<=i*x<=min(m,n))f[i*x]\) 倒着更新的容斥。
这里正式给出容斥公式:

\(\left| \bigcup_{i=1}^n A_i \right| = \sum_{i=1}^n|A_i| - \sum_{1\leq i<j\leq n} |A_i \cap A_j| + \sum _{1\leq i<j<k\leq n}|A_i \cap A_j \cap A_k| - \cdots + (-1)^{n-1} | A_1 \cap \cdots \cap A_n |\)

i.e. \(\left|\bigcup_{i=1}^n A_i \right| = \sum_{\emptyset \neq J\subseteq \{1,2,\ldots ,n\}} (-1)^{|J|-1}{\Biggl |}\bigcap_{j\in J}A_{j}{\Biggr |}\)

开头的两个网站给出了山寨做法,这里给出正式的公式:

代码

//头文件省略



心路历程



P2522 BZOJ2301 hdu1695(数据弱) Problem b

题意

\(\sum\limits ^{b}_{i=a}\sum\limits ^{d}_{j=c} gcd( i,j) =k\)


题解


代码

//头文件省略



心路历程



P3312 [SDOI2014] bzoj3529 数表

题意

$\sum\limits _{ \begin{array}{l}
1\leqslant i\leqslant n\
1\leqslant j\leqslant m\
F( gcd( i,j)) \leqslant a\
\end{array}} F( gcd( i,j)) \ mod\ 2^{31} $


题解


代码

//头文件省略



心路历程



P1829 bzoj 2154 [国家集训队]Crash的数字表格 / JZPTAB

题意

\(\sum\limits ^{n}_{i=1} \sum\limits ^{m}_{j=1} lcm( i,j)\)


题解

鬼畜推导


代码

//头文件省略



心路历程



P1829 [国家集训队]Crash的数字表格 / JZPTAB

题意

同上题,多组数据


题解


代码

//头文件省略



心路历程



luoguP1403 luoguP3935 P2158 [SDOI2008]仪仗队 P1390 公约数的和

UVA11417 GCD UVa11424 GCD - Extreme (I)

HDU 6428

posted @ 2019-03-22 16:27  SuuTTT  阅读(259)  评论(0编辑  收藏  举报