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. SecureCRT使用+堡垒机简单使用

    写在前面的话 自从升级为宝妈后,回来发现好多东西都遗忘了.熟话说:好记性不如烂笔头,我还是记录下来吧. 堡垒机使用的几个技巧 1.快捷操作         1) 输入 ID 直接登录.         ...

  2. 目标双站定位仿真C++代码

    point-position2 初步完善版. 不再使用eigen库,行列式直接计算得出结果.判断共面异面分别处理. 先提取双站获得图像的匹配特征点,由双站位置信息解析目标位置. // point-po ...

  3. hashMap与 hashTable , ArrayList与linkedList 的区别(详细)

    ArrayList 采用的是数组形式来保存对象的,这种方式将对象放在连续的位置中,所以最大的缺点就是插入删除时非常麻烦LinkedList 采用的将对象存放在独立的空间中,而且在每个空间中还保存下一个 ...

  4. 阶段1 语言基础+高级_1-3-Java语言高级_09-基础加强_第3节 注解_18_注解_案例_简单的测试框架

    定义计算器的类 用注解的方式去测试计算器类里面 所有的方法 想验证哪个方法 就在方法的上面加上注解@check 执行TestCheck验证方法 控制台的输出 根目录生成了一个 bug.txt文件 重写 ...

  5. 2018.03.29 python-pandas 数据透视pivot table / 交叉表crosstab

    #透视表 pivot table #pd.pivot_table(data,values=None,index=None,columns=None, import numpy as np import ...

  6. 中国MOOC_零基础学Java语言_第1周 计算_第1周编程题_1温度转换

    第1周编程题 依照学术诚信条款,我保证此作业是本人独立完成的. 温馨提示: 1.本次作业属于Online Judge题目,提交后由系统即时判分. 2.学生可以在作业截止时间之前不限次数提交答案,系统将 ...

  7. paramiko远程连接linux服务器进行上传下载文件

    花了不少时间来研究paramiko中sftpclient的文件传输,一顿操作猛如虎,最后就一直卡在了路径报错问题,疯狂查阅资料借鉴大佬们的心得,还是搞不好,睡了个午觉醒来,仔细一看原来是指定路径的文件 ...

  8. pandas DataFram的insert函数

    原文链接:https://blog.csdn.net/yanwucao/article/details/80211984 DataFrame.insert(loc, column, value, al ...

  9. 【Qt开发】解决Qt程序在Linux下无法输入中文的办法

    解决Qt程序在Linux下无法输入中文的办法 一位网友问我如何在Linux的Qt的应用程序中输入中文,我一开始觉得不是什么问题,但是后面自己尝试了一下还真不行.不仅是Qt制作的应用程序,就连Qt Cr ...

  10. DOM练习(邓邓版)

    先来图片: 今天直接粘代码: 下面是html: <h4>01.图片切换</h4> <img width = "100" src = "../ ...