1.数论函数的卷积公式

(ƒ*g)(n)=Σd|nƒ(d)×g(n/d)

已知f*[1~n],g[1~n]

怎么求(f*g)[1~n]?

  一个个求复杂度O(n根号n)

如何加速?

  考虑更换枚举顺序(这点很重要,在接下来的一些求和运算中会用到)

  枚举代码:

ll f[N],g[N],h[N];
void calc(int n)
{
for(int i=;i*i<=n;i++)
{
h[i*j]+=f[i]*g[i];
for(int j=i+;i*j<=n;j++)
h[i*j]+=f[i]*g[j]+f[j]*g[i];
}
}

这样子速度就会变为n log n

例子1:

求当a≤x≤b,c≤y≤d时,gcd(x,y)=1的个数

前缀和如图

式子为:

Σi=1n Σj=1m [gcd(i,j)=1]

  []意思:为真返回1否则返回0

  联系到莫比乌斯函数μ(d)

  Σd|n μ(d):

    当n=1时它=1

    否则=0

这两个是可以等效替换的:

Σi=1Σj=1m Σd|gcd(i,j)μ(d)

交换枚举顺序,降到了线性复杂度:

对于这个东西:

d从1枚举到n时,可能的取值只有o(根号n)种

由于当1≤d≤根号n和根号n≤d≤n时,最多情况数都是根号n

所以可能的取值为O(根号n)种

我们可以画一条数轴,每一个节点表示或者的值有变化,则我们可以画出O(根号n)个区间    ,并且复杂度O(根号n)

可以推出x的表达式:

这里是因为这部分要<n,

所以这个分数是<1的,一个整数乘一个<1的数再取整,所得的数小于原来的整数

代码:

 xian_xing_shai();

 for (int a=;a<=n;a++)
sum_mu[a] = sum_mu[a-] + mu[a]; int solve(int n,int m)
{
int ans=;
//for (int d=1;d<=n;d++)
// ans += mu[d] * (n/d) * (m/d);
for (int d=;d<=n;)
{
int next_d = min(
n/(n/d),
m/(m/d)
);
ans += (sum_mu[next_d] - sum_mu[d-]) * (n/d) * (m/d);
d=next_d+;
}
return ans;
}

例子2
求当a≤x≤b,c≤y≤d时gcd(x,y)是质数的(x,y)的个数

交换枚举顺序:变为枚举质数P在前

然后再变换枚举的东西:

这个东西是一个积性函数,可以按照积性函数求

2.组合数问题

一.加法原理:具有性质A的事件有m个,具有性质B的事件有n个,则具有性质A或性质B的事件有m+n个

百度百科定义:做一件事情,完成它有n类方式,第一类方式有M1种方法,第二类方式有M2种方法,……,第n类方式有Mn种方法,那么完成这件事情共有M1+M2+……+Mn种方法。

举个例子:从武汉到上海有乘火车、飞机、轮船3种交通方式可供选择,而火车、飞机、轮船分别有k1,k2,k3个班次,那么从武汉到上海共有 k1+k2+k3种方式可以到达。

二,乘法原理:具有性质A的事件有m个,具有性质B的事件有n个,则具有性质A及性质B的事件有mn个

百度百科定义:做一件事,完成它需要分成n个步骤,做第一 步有m1种不同的方法,做第二步有m2种不同的方法,……,做第n步有mn种不同的方法。那么完成这件事共有 N=m1×m2×m3×…×mn种不同的方法。

例如,从A城到B城中间必须经过C城,从A城到C城共有3条路线(设为a,b,c),从C城到B城共有2条路线(设为m,t),那么,从A城到B城共有3×2=6条路线

对于每一个质因数的n次方,共有n+1中选择方法,即这个质因数的0~n次方

故共有   4*3*5=60  种方法

 

取两册文字不同的书的方案=取日文英文+取日文中文+取英文中文

相同的:取日文日文,取中文中文,取英文英文

随便取两册:上两问加起来

排列组合:

组合:

从n个元素中选取r个元素,当不计顺序时,其方案数为:

Cnr=C(n,r)=n!/r!(n-r)!  

排列:

从n个元素中选取r个元素,当考虑顺序时,其方案数为:

Pnr=P(n,r)=n! / (n-r)!

考虑两面旗帜的方法和三盆花的方法,根据乘法原理乘起来即可

ans=P(5,2)*P(20,3)

先考虑对七名男生排序,然后在六个间隔中插入三名女生

ans=P(7,7)*P(6,3)

 

先看个位数:有0,2,4,6,8五种情况,对于0和8,它的千位数都是有2,3,4,5,6五种情况,对于剩下的三个数,各有2,3,4,5,6中除去它自己四种情况,故千位和个位可能的情况共有:2*5+4*3=22 种 ,然后对百位和十位排序,有P(8,2)种情况

故ans=22*P(8,2)

总的方案数减去选上男A和女B的方案数

ans=C(12,5)-C(10,3)

按余数分类:余数相同和余数不同

余数相同分为:(0,0,0),(1,1,1).(2,2,2);

1~300这些数中,余数相同的各有100个

故每一种可能的方式均为C(100,3)

余数不同时,每一个数都是从不同的余数中选一个,故方式为C(100,1)3

ans=3*C(100,3)+C(100,1)3

由于每种颜色的旗帜是相同的,所以讲相同颜色的旗帜放一起,只能算是一种方式

这个时候我们需要用组合数

ans=C(16,4)*C(12,4)*C(8,4)*C(4,4);(为什么楼主也在想...有待补充,哪位大佬会记得跟我说一下)

组合数及其相关性质

  • 有n个不同元素,从中选r个,但是每个可以选多次,则其方案数为C(n+r-1,r)

证:设选的数为a1,a2,....,ar,(由小到大),则1≤a1≤a2≤a3......≤ar≤n

我们可以通过一种变换,就是让ai+i-1,这样可以去掉=

有:1≤a1<a2+1<a3+2<.....<ar+r-1<n-r+1

中间还是有r个数,我们可以设bi=ai+i-1

则1≤b1<b2<b3<....<br≤n-r+1

所以问题就开始转换为无重复组合问题,即在n+r-1 个元素中选中 r个的组合数 。

  • 有n个不同元素,从中选r个,但是选中的元素大小不能相邻,则其方案数为C(n-r+1,r)

证:设选的数为a1,a2,....,ar,(由小到大),则1<a1<a2<a3<......<ar<n\

其中a1+1<a2,a2+1<a3....

将每个ai-i+1

有a1<a2-1<a3-2<...<ar-r+1

其他的一些性质

  • C(n+m,n)=C(n+m,m)
  • C(n,m)=C(n-1,m-1)+C(n-1,m)
  • C(n+r+1,r)=C(n+r,r)+C(n+r-1,r-1)+C(n+r-2,r-2)+....+C(n,0)
  • C(n,l)C(l,r)=C(n,r)C(n-r,l-r)
  • C(n,0)+C(n,1)+.....+C(n,n)=2n
  • C(n,0)-C(n,1)+C(n,2)-...=0
  • C(r,r)+C(r+1,r)+...+C(n,r)=C(n+1,r+1)

清北澡堂 Day 3 上午的更多相关文章

  1. 清北澡堂 Day2 上午 一些比较重要的关于数论的知识整理

    1.算数基本定理: 对于任意的大于1的正整数N,N一定能够分解成有限个质数的乘积,即 其中P1<P2<...<Pk,a1,a2,...,ak>=1; 证: 存在性: 若存在最小 ...

  2. 清北澡堂 Day2 下午 一些比较重要的数论知识整理

    1.欧拉定理 设x1,x2,.....,xk,k=φ(n)为1~n中k个与n互质的数 结论一:axi与axj不同余 结论二:gcd(axi,n)=1 结论三:x1,x2,...,xk和ax1,ax2, ...

  3. 济南清北学堂游记 Day 1.

    快住手!这根本不是暴力! 刷了一整天的题就是了..上午三道题的画风还算挺正常,估计是第一天,给点水题做做算了.. rqy大佬AK了上午的比赛! 当时我t2暴力写挂,还以为需要用啥奇怪的算法,后来发现, ...

  4. 清北学堂2017NOIP冬令营入学测试P4745 B’s problem(b)

    清北学堂2017NOIP冬令营入学测试 P4745 B's problem(b) 时间: 1000ms / 空间: 655360KiB / Java类名: Main 背景 冬令营入学测试 描述 题目描 ...

  5. 清北学堂2017NOIP冬令营入学测试 P4744 A’s problem(a)

    清北学堂2017NOIP冬令营入学测试 P4744 A's problem(a) 时间: 1000ms / 空间: 655360KiB / Java类名: Main 背景 冬令营入学测试题,每三天结算 ...

  6. 清北Day 2

    清北第二天,感受到了来自这个世界的不友善,大概把没听过不会的"名词"记录下来就已经一面了,然后被大佬说这都是最基础的东西,就很皮,那就趁别人练习字符串的题的时候,来写波博客了,倒不 ...

  7. 清北Day4

    版权声明:如需转载请标明出处,未得到本人许可请勿转载. 今天就可以看到传说中的 数据结构 嘿嘿嘿嘿 都有什么呢 链表 队列 栈 st表 hash 线段树 树链剖分 一.栈: 放出来这个看烂了的图 值得 ...

  8. 清明培训 清北学堂 DAY1

    今天是李昊老师的讲授~~ 总结了一下今天的内容: 1.高精度算法 (1)   高精度加法 思路:模拟竖式运算 注意:进位 优化:压位 程序代码: #include<iostream>#in ...

  9. 清北省选 DAY last 集锦

    这是题目描述的链接: http://lifecraft-mc.com/wp-content/uploads/2018/03/problems1.pdf (虽然这次没去清北,但还是厚颜无耻的做了一下这套 ...

随机推荐

  1. 2019-02-10 扩展Python控制台实现中文反馈信息

    "中文编程"知乎专栏原文地址 参考了周蟒的实现, 运行效果如下: $ python3 解释器.py Python 3.6.5 (v3.6.5:f59c0932b4, Mar 28 ...

  2. TS学习随笔(七)->声明文件

    now我们来看一看TS怎么声明文件, 在JS里面我们经常会使用各种第三方类库,引入方式也不太相同,常见的就是在HTML中通过script标签引入,然后就可以使用全局变量$或者jQuery了 我们通常这 ...

  3. Android 常驻广播和非常驻广播

    一.知识准备 ①常驻广播接受者:使用AndroidManifest.xml注册,接受者不随Activity的销毁而销毁,也就是拥有独立的生命周期. ②非常驻广播接受者:使用registerReceiv ...

  4. CentOS.7下安装配置FTP和SFTP服务

    一: FTP Centos7中默认已经安装了sshd服务(sftp), vsftpd需要手动安装 1.安装并启动FTP服务 1.1 安装vsftpd 使用 yum 安装 vsftpd yum inst ...

  5. python 迭代器协议和生成器

    一.什么是迭代器协议 1.迭代器协议是指:对象必须提供一个next方法,执行该方法要么返回迭代中的下一项,要么就引起一个stoplteration异常,以终止迭代(只能往后走,不能往前退) 2.可迭代 ...

  6. c/c++ linux 进程间通信系列1,使用signal,kill

    linux 进程间通信系列1,使用signal,kill 信号基本概念:  软中断信号(signal,又简称为信号)用来通知进程发生了异步事件.进程之间可以互相通过系统调用kill发送软中断信号.内核 ...

  7. mysql 的远程链接字符

    默认情况下,mysql只允许本地登录,如果要开启远程连接,则需要修改/etc/mysql/my.conf文件. 一.修改/etc/mysql/my.conf找到bind-address = 127.0 ...

  8. Windows的GDI映射方式,逻辑坐标,设备坐标的理解

    最近在学Win32的编程,看的是<Windows程序设计第5版>一书,这本书是台湾人翻译的,有些译法和大陆不一样,书中还有一些错误的地方,很多时候需要中英文对照阅读,下载请点击 https ...

  9. bootstrapt 使用遇到问题

    1.布局的时候什么时候用xs,sm,md,lg? small grid (≥ 768px) = .col-sm-*, medium grid (≥ 992px) = .col-md-*, large ...

  10. kernel笔记——内核同步与锁

    内核同步 内核同步解决并发带来的问题,多个线程对同一数据进行修改,数据会出现不一致的情况,同步用于保护共享数据等资源. 有两种形式的并发: 同时进行式并发,在不同cpu上执行的进程同时访问共享数据 二 ...