• 数学专题——学习笔记


    @

    考试总结

    \(OI\)数学是我的弱项之一,虽然我在文化课的学习中,数学都是为我拉分的,但是OI数学和高中数学还是有着很大的区别的。最主要的区别是,OI中的数学是工具,用来加快枚举或者找到规律快速推出结论,而高中的数学是纯粹的数与形的变换与结合,需要自己逐步推导,一步一步地演算出正确答案。从数上讲,OI数学很大一部分研究的是整数,即是数论了,其他情况下都是用实数(double)进行运算,而高中数学则讲究绝对的准确,对于如分数,无理数。这的确可以称得上的两个领域。

    这两天考试,我得到的基本是大众分数,再次说明了我不太擅长数学。

    Day1(190 points)

    T1是个比较裸的扩展欧几里得,我花了5分钟把细节想好很快就过了样例,在手搓了几个数据过了后就没管了。期望100实际100。
    T2我看了一个小时才猛然发现规律,一列的组合数的值就等于它右下角的那个组合数的值,也很好证明,代码挺简单的,但最好没有处理好边界情况,被卡了10分(其实卡10分已经很良心了,记得以前没判边界直接WA完了)。期望100实际90。
    T3看了题解没看懂,说什么以前做过,可能是上一届做过吧,下来再找哪位A掉的同学请教下了。

    Day2(100 points)

    T1我还以为又是什么莫比乌斯反演,听了ltw讲后,才知道是考察对积性函数的理解和对线性筛的理解,果然我的数论还是欠缺了点。
    T2开始没思路,后来发现第二个循环节的开头一定是个1,然后用BSGS算法可以轻松解出(这道题还要卡map,自己本地测大样例还要手写哈希表才可以过)。期望100实际100。
    T3一直没思路。tqr作为打表大佬花了两个小时打表,推出了O(1)的算法,很厉害,但是我觉得这种方法并不是一直有效,比如上次我打表2h一点规律也没得出来。sxk讲了这道题的正解,数位dp,先用卢卡斯定理对组合数进行分解,然后每个分解出的组合数看成一位,这个思路必须对数位dp理解很深才可以想出来啊。

    总的来说,这两次考试暴露了我数学上的很多漏洞,还需要大力填坑,这几日争取把洛谷的数学试炼场刷完,结论要尽量自己想,想不出来听了别人讲了后也要能自己独立推出来才行。

    数论

    扩展欧几里得

    ta用于解二元一次不定方程:$$ax+by=c$$
    我们先考虑解这个方程:$$ax+by=gcd(a,b)$$
    如果\(gcd(a,b)|c\),那么方程有解,否则无解
    怎么解呢?
    既然$$ax+by=gcd(a,b)$$成立,那么易证下面这个式子也应该成立:

    \[b*x_1+(a\%b)*y_1=gcd(a,b) \]

    接下来可以一直迭代,直到\(b_n=0\),这时不难发现:$$a_n=gcd(a,b)$$
    于是我们找到了一组特殊解:$$x_n=1,y_n=0$$
    这时我们要做的是以这组特殊解倒推上一组方程的一组解。
    由开始的两个式子可以做一些特殊的变化:

    \[a*x+b*y=gcd(a,b) \]

    \[b*x_1+(a\%b)*y_1=gcd(a,b) \]

    \(→\)

    \[a*x+b*y=gcd(a,b) \]

    \[b_1*x+(a-\lfloor\frac{a}{b}\rfloor*b)*y_1=gcd(a,b) \]

    \(→\)

    \[a*x+b*y=gcd(a,b) \]

    \[a*y_1+b*(x_1-\lfloor\frac{a}{b}\rfloor*y_1)=gcd(a,b) \]

    令$$x=y_1;y=x_1-\lfloor\frac{a}{b}\rfloor*y_1$$
    就得到了上一层的解;
    再一直回溯上去就可以得到最开始的方程的一组解了;
    代码(超级好写):

    int exgcd(ll &x,ll &y,ll a,ll b){
    	if(b==0){
    		x=1;
    		y=0;
    		return a;
    	}
    	ll g=exgcd(x,y,b,a%b);
    	ll z=x;
    	x=y;
    	y=z-a/b*y;
    	return g;
    }
    

    乘法逆元

    如果让你求一个式子\(a/b(mod c)\)的结果,怎么办?
    这时需要乘法逆元。
    定义一个数\(x\)在模\(p\)意义下的逆元为\(inv_x\),可以记为\(x^{-1}\)
    满足$$x*inv_x=1(mod p)$$
    有三种求法:

    1.费马小定理(最好写)

    \[x^{p-1}=1(mod p) \]

    左右同时乘以\(x^{-1}\)得到

    \[x^{p-2}=x^{-1}(mod p) \]

    然后直接快速幂即可求出逆元了
    (费马小定理要求\(p\)为质数)

    2.扩展欧几里得

    求$$x*inv=1(mod p)$$
    中的\(inv\)
    可以把式子等价的写成

    \[x*inv+p*y=1(mod p) \]

    是不是很眼熟,套一下\(exgcd\)的板子就行了
    (这里的\(p\)不一定是质数,只要满足\(x\)\(p\)互质保证有解即可)

    3.递推

    可以\(O(n)\)地求出\(1-n\)中每个数在模\(p\)意义下的逆元
    首先$$1*1^{-1}=1(mod p)$$
    \(inv_1=1\)
    然后考虑把模数\(p\)化成如下形式

    \[p=k*x+b \]

    其中$$k=\lfloor\frac{p}{x}\rfloor$$$$b=p%x$$
    显然$$kx+b=0(mod p)$$
    两边同时乘以\(x^{-1}\)\(b^{-1}\)得到$$k
    b{-1}+x{-1}=0(mod p)$$
    由于\(b\)小于\(x\),那么\(b^{-1}\)一定已经已知
    因此可以递推了:

    inv[i]=(p-p/i)*inv[p%i]%p;
    

    注意在\(-p/i\)前面加一个\(p\)是为了方便运算,防止复杂的负数取模

    (扩展)中国剩余定理

    中国剩余定理

    参考自算法竞赛进阶指南

    解同余方程组:

    \[x\equiv a_n\pmod{m_n} \]

    一个通解是:$$x = \sum\limits_{i=1}^n{a_iM_it_i}$$

    其中 $$m = \prod\limits_{i=1}^nm_i$$

    \[M_i=m/m_i \]

    \(t_i\)是方程

    \[M_it_i\equiv 1\pmod{m_i} \]

    的一个解

    如果要求最小的非负整数解,只需把\(x\)取模即可。

    (扩展)卢卡斯定理

    求解:$$C^{m}_{n} (mod\ p)$$

    即求把m、n写成p进制下每一位构成的组合数的乘积。

    \[ans=∏C^{m_i}_{n_i} (mod \ p) \]

    莫比乌斯反演(待填)

    杜教筛(待填)

    函数(以下待填)

    快速傅里叶变换(Fast Fourier Transformation)

    快速数论变换(Number Theoretic Transforms)

    快速沃尔什变换(Fast Walsh Transform)

    矩阵(待填)

    矩阵乘法及快速幂

    矩阵加速

    计算几何(没学)

  • 相关阅读:
    IT小小鸟读后感
    关于C语言的问卷调查
    (学习进度表)【第六周】
    (学习进度表)【第五周】
    作业二(过早的放弃是失败的根源)
    读《世界是数字的》笔记
    作业3(学习进度表)【第四周】
    作业1
    读《我是一只IT小小鸟》笔记
    价值观作业
  • 原文地址:https://www.cnblogs.com/hzyhome/p/11658227.html
Copyright © 2020-2023  润新知