exCRT

  • 求解韩信点兵问题,常见的就是合并不同\(mod\)。
  • 先mo一发高神的板子
for(R i=2;i<=n;++i){
ll Y1,Yi,lcm=Lcm(p[i],p[1]);
exgcd(p[1],p[i],a[i]-a[1],Y1,Yi);
add(a[1],mul(p[1],Y1,lcm),lcm),p[1]=lcm;
}
  • 思想是合并方程组,现在假设我们要求解的是:

\[x-p_0*y_0=a_0$$$$x-p_i*y_i=a_i
\]

  • \(x\)是实际的值,显然有:

\[p_0*y_0-p_i*y_i=a_i-a_0
\]

  • 是\(exgcd\)的形式,把\(y_0\)和\(y_i\)解出来。

  • 此时$$p_0*y_0 = a_i-a_0\ \ \ mod \ p_i$$

  • 所以让\(y_0\)对\(p_i\)取模,回代到$$x=p_0*y_0+a_0$$

  • 此时\(x\)是在\(mod\ p_i*p_0\)意义下,取模后便是新的\(a_0\)了。

  • 最后更新\(p_0\)

  • excrt就是把\(p_0*=p_i\)改成\(p_0=lcm(p_0,p_i)\)罢了。

  • 模板

BSGS

  • 拔山盖世?

$$y^x≡z\ mod\ p$$

  • 设\(x=i*m-j\),其中\(m=\sqrt p+1\)则

$$yj*z≡y{i*m}$$

  • 枚举\(j\),把对应的\(y^j*z\)放在\(hash\)表里。或者也可以用\(map\)

  • 注意这个时候的\(j\)要取最大值,从小往大枚举直接附值即可。

  • 枚举\(i\),查对应的\(y^{i*m}\),如果有值,答案就是\(i*m-j\)了。

  • 复杂度\(O(\sqrt p)\)

  • 注意前提条件\(gcd(y, p) = 1\)

  • 如果\(y\ mod\ p==0\),则无解。

  • \(upd\ on\ 11.7\)

  • 首先有个模板题P4454 [CQOI2018]破解D-H协议

  • 注意到

$$yj*z≡y{i*m}$$

  • 这个东西中\(i*m-j\ge 0\)恒成立,所以在预处理时要\(j\)要从\(0\)开始到\(m\),但是查表的时候\(i\)要从\(1\)开始到\(m\)。

同余最短路

  • 用一些数去拼凑出给定的数。
  • 以最小值建立剩余系,令\(f_i\)表示在拼凑出长度\(mod\)最小值为\(i\)的最小花费。
  • 显然每一个\(f_i\)都是这个剩余系中的最小值,且相互独立。
  • 连边后做最短路即可。
  • 不能拼凑出的最大值即位\(max(f_i-w_0)\),\(w_0\)是剩余系模数。
  • [x] HDU 6071 Lazy Running
  • 给出四个点1,2,3,4,1和2,2和3,3和4,4和1之间有路相连,现在从2点出发,最后回到2点,要求路径大于等于\(K\),问路径长度最短是多少,\(K\leq 10^{18},d\leq 3*10^4\)。
  • 同余最短路套路了,取一条与\(2\)相连的权值最小的边\(w\)。
  • 若存在一条从起点到终点的长度为k的路径,那么必然存在一条长度为\(k+2w\)的路径。
  • 即只要一开始在那条边上往返走就好了。
  • 设\(d_{i,j}\)表示从起点到\(i\),路径长度模\(2w\)为\(j\)时,路径长度的最小值。
  • 然后\(dij\)预处理\(d\),最后枚举所有剩余系,如果大于等于\(K\)就恰好更新答案,否则补上剩下除以\(2*w\)向上取整数。

exgcd

  • 求解\(a*x+b*y=c\)的最小特解。
  • 注意在某些题目中要判断是否有解(裴蜀定理)。
  • 设\(f=gcd(a,b,c)\),有一些题目中\(x=0\)要还原成\(b\),但是此时应该要还原成\(\frac {b}{gcd}\),这样才能保证最小正整解。

卢卡斯定理

  • 处理计算组合时取模数特别小的时候,往往小于\(n,m\)。
  • 对于质数而言,

\[C_n^m=C_{n\ mod\ p}^{m\ mod\ p }*C_{n/p}^{m/p }
\]

裴蜀定理

  • \(a*x+b*y=c\)成立的充要条件是\(gcd(a,b)|c\).

组合计数

  • 这不是计数里面的东西吗咕咕。

线性筛逆元

  • 假设现在要求\(inv_i\),那么
  • 有\(x*i+j=p\),此时\(j=p\ mod\ i\),\(x=\frac {p}{i}\)
  • 在\(p\)剩余系下,那么\(inv_i=-1*x*inv_j\)
  • 所以\(inv(i)=-inv(p\ mod\ i)*(p/i)\)

三分法

  • 咕咕。

高斯消元

  • 我采用的是高斯约旦消元法。
  • 先找到系数最大的点提到当前行,然后消为\(1\),在把其他所有行的这一列消为\(0\)。
  • 这样就省去了回带的过程。
  • 无解情况:所有系数全为0但是值不为0
  • 不唯一解情况:所有系数全为0值也为0
  • 注意要先判断无解再判断解不唯一。

noip考前抱佛脚 数论小总结的更多相关文章

  1. NOIP考前划水

    NOIP考前划水 君指先跃动の光は.私の一生不変の信仰に.唯私の超電磁砲永世生き! 要开始背配置了? 3行不谢. (setq c-default-style "awk") (glo ...

  2. Noip前的大抱佛脚----数论

    目录 数论 知识点 Exgcd 逆元 gcd 欧拉函数\(\varphi(x)\) CRT&EXCRT BSGS&EXBSGS FFT/NTT/MTT/FWT 组合公式 斯特林数 卡塔 ...

  3. NOIP考前复习-数制转换,数论模板与文件读写

    数制转换有两种题型,一般一题,分值1.5分. 题型一:R进制转十进制 解法就是:按权展开,但要注意各个位的权,最低位(最右边)的权是0次方,权值为1. 纯整数的情况: (11010110)2 = 1× ...

  4. NOIP 考前 数论复习

    POJ 2891 x=r1 (mod a1) x=r2 (mod a2) x=a1*x+r1,x=a2*y+r2; a1*x-a2*y=r2-r1; 用Extend_Gcd求出m1*x+m2*y=d; ...

  5. NOIP考纲总结+NOIP考前经验谈

    首先来一张图,很直观(截止到2012年数据) 下面是收集的一些,我改了一下 红色加粗表示特别重要,必须掌握 绿色加粗表示最好掌握,可能性不是很大,但是某些可以提高程序效率 高精度 a.加法 b.减法 ...

  6. NOIP 考前研究

    NOIP 2017 试题研究 D1T1 小凯的疑惑 (45 min) 看到题面,大概是推数学公式. 先打暴力表,观察 \(a,b\) 与 \(n\) 的关系.猜想 \(a×b−a−b\). 引理:对于 ...

  7. 【NOIP考前模拟赛】纯数学方法推导——旅行者问题

    一.写在前面 这题似乎是一道原创题目(不是博主原创),所以并不能在任何OJ上评测,博主在网盘上上传了数据(网盘地址:http://pan.baidu.com/s/1mibdMXi),诸位看官需者自取. ...

  8. BZOJ4635 : 数论小测验

    第一问: 设$a[i]$表示使用$[1,i]$的数字$n$次形成的数组里有多少个$\gcd=1$. 考虑容斥,则$a[i]=i^n-\sum_{j=2}^i a[\lfloor\frac{i}{j}\ ...

  9. 【学习整理】NOIP涉及的数论 [updating]

    扩展欧几里得 求二元一次不定式方程 的一组解. int exgcd(int a,int b,int &x,int &y) { int t; ;y=;return a;} t=exgcd ...

随机推荐

  1. 【零售App】—— react/ant design mobile项目爬坑

    一.H5制作 - 图片文本的动画效果 bug:打开一个模板,添加图片,添加动画效果,若先选定动画效果,再调节动画时间和延迟时间,则动画和延迟时间没有改变:若先调节动画时间和延迟时间在选定动画效果,则动 ...

  2. python使用内置方法和修饰器方法获取类名、函数名

    1. 外部获取 从外部的情况好获取,可以使用指向函数的对象,然后用__name__属性. def a(): pass a.__name__ 或者 getattr(a,'__name__') 2. 内部 ...

  3. RCU原理分析

    简介 RCU(Read-Copy Update)是数据同步的一种方式,在当前的Linux内核中发挥着重要的作用.RCU主要针对的数据对象是链表,目的是提高遍历读取数据的效率,为了达到目的使用RCU机制 ...

  4. C#中winform下利用ArcEngine调用ArcGIS Server发布的服务 AE9.3

    主要使用了AE中的IAGSServerOject接口及IMapServer接口.Private void GetServerTest_Click(object sender, EventArgs e) ...

  5. rocketMQ 通信协议格式

    rocketMQ 使用 netty 通信,端对端的通信,为了避免粘包.分包,需要指定发送数据的边界. 使用的解码器是 LengthFieldBasedFrameDecoder // org.apach ...

  6. OpenStack Nova 高性能虚拟机之 NUMA 架构亲和

    目录 文章目录 目录 写在前面 计算平台体系结构 SMP 对称多处理结构 NUMA 非统一内存访问结构 MPP 大规模并行处理结构 Linux 上的 NUMA 基本对象概念 NUMA 调度策略 获取宿 ...

  7. Windows下GIT的用户密码修改

    Windows下GIT的用户密码修改

  8. 安装golang web框架 gin

    gin 地址https://github.com/gin-gonic/gin#installation 去gin 地址 clone 下来,放到对应的包中即可.如:gin就放在项目文件夹/github. ...

  9. LeetCode算法题-Positions of Large Groups(Java实现)

    这是悦乐书的第323次更新,第346篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第193题(顺位题号是830).在由小写字母组成的字符串S中,那些相同的连续字符会组成集 ...

  10. 卷积神经网络应用于MNIST数据集分类

    先贴代码 import tensorflow as tf from tensorflow.examples.tutorials.mnist import input_data mnist = inpu ...