基础数论入门
来源:互联网 发布:上海威利旺卡学费知乎 编辑:程序博客网 时间:2024/06/05 15:19
(一)定理和性质
一、裴蜀定理
如果
证明:非常简单,鉴于可能有数论刚入门的OIer所以这里简单证明一下:
因为
所以我们就可以假设
那么
二、整除的性质
正确性显然
三、同余
第二个式子证明:
第三个式子证明:
四、逆元
如果
P.S:这个-1次方只是表示逆元一个符号 并不是真的-1次方 但是可以把它当成-1次方在同余中进行运算
五、剩余系
任何m个分别属于m个剩余类的数组组成剩余系
六、φ
所有的n满足
记录这样的n的个数为
七、关于缩系的一个定理
如果
证明自己yy一下好啦
八、欧拉定理
如果
证明:
当x取遍模m的缩系时,ax也取遍模m的缩系(这个自己yy一下,具体证明不太会说qwq)
所以我们可以得出
用处:如果
如果
九、拉格朗日定理
对于一个次数为n的多项式F(x),
十、二次剩余
对于一个奇素数p,如果存在x使得
如果
如果
十一、威尔逊定理
证明:2到p-2这些数都存在逆元,可以两两匹配
十二、阶
如果
结论:
证明:反证法,设有一个最小的x ,
则
因为x是最小的满足条件的正整数 ,
十三、原根
如果
只有
十四、其他
(二)算法
一、辗转相除法
直接贴代码吧,证明网上有详解,这里不再赘述
int gcd(int a,int b){ if (b==0) return a; else return gcd(b,a%b); }
二、扩展欧几里得算法
用处:求解形如
(
推导:假设解出一组解
=
=
代码
int extended_gcd(int a,int b,int &x,int &y){ int ret,tmp; if (!b) { x=1;y=0;return a; } ret=extended_gcd(b,a%b,x,y); tmp=x; x=y; y=tmp-a/b*y; return ret;}
一个神奇的小结论:
对方程
则它的任意整数解可以写成
证明:
如果我们现在有解
变形可以得到
两边同时除以
得到
因为
取
三、求逆元
由于
如果m为素数,那么答案为
否则解线性同余方程
四、线性求1到n的逆元
设
算出
五、线性同余方程组(CRT)
形如
解法:增量法
假设一开始的方程
那么有
可以通过扩欧解出一个解
然后加入下一个方程
六、求n!中p的指数
还有一个O(1)求的公式(可以用于一些奇怪的数位dp)
f(n) 表示 n在p进制下的数位和
然而公式怎么推的并不会。。。
七、组合数
n,m较小的话
n,m较大的话暴力用
还有一种更快的方式求组合数 想学习一下的人百度Lucas定理
这里给出公式:
八、求阶
暴力枚举1到φ(m)判断即可
九、求原根
从小到大枚举g然后暴力判断即可
十、指数方程
①
如果m为素数:
使用BSGS(baby-step giant-step)解决
令
则
从0-m 枚举r 算出
从1-m 枚举q 算出
如果m不是素数:
提取公因数直到
可能大家不理解
举个栗子:
假设我们要解一个方程
8和24不互质
所以我们先提取一个8
变成
然后约一下变成
最后用BSGS求解得x=2
如果
②
如果m为素数:
如果
直接解x即可
否则:
先求出m的原根g
解出一个s符合
假设
那么
由原根的性质得到:
解出t即可
如果m不为素数:
分解m然后用CRT合并
当出现2^n时,因为它没有原根,所以说枚举答案即可
十一、二次剩余
形如
判断一个数是不是另一个数的二次剩余,只需要计算
复杂度O(p)
还有一种O(log n)的算法叫做cipolla’s algorithm,然而我并不会这种算法,而且这种算法貌似非常冷门,只有维基百科上才能查到…
至于二次剩余的用处嘛…据说可以用来卡常数
十二、Miller-rabin
一个判断一个数是不是素数的算法
并不会写…直接背代码就好2333
十三、Pollard-rho
分解质因数
也不会写…也可以直接背代码QwQ
(三)数论函数
一、积性函数
对于
常见的积性函数
二、狄利克雷卷积
两个数论函数
则
几条性质:
①卷积满足交换律,结合律。
②两个积性函数的卷积还是积性函数
③
三、莫比乌斯函数
如果n有平方因子那么
如何
即
四、莫比乌斯反演
如果
推导:
五、线性筛素数
思想:每个合数只被它最小的素因子访问到
代码:
void get_prim(int n){ vis[1]=1; for (int i=2;i<=n;i++) { if (!vis[i]) { cnt++;prim[cnt]=i; } for (int j=1;j<=cnt&&i*prim[j]<=n;j++) { vis[i*prim[j]]=1; if (i%prim[j]==0) break; //看不懂这一步的去重新理解思想 } }}
扩展:通过线性筛可以线性求出一个积性函数的值。
欢迎各位神犇前来交流qwq
- 基础数论入门
- 数论基础
- 数论基础
- 数论 基础
- 数论基础
- 数论基础
- 数论基础
- 基础数论
- 基础数论
- 数论基础
- 数论基础
- 数论基础
- 数论基础
- 数论基础
- 数论基础
- 数论基础
- 数论基础
- 数论基础
- SEO优化知识:为什么网站没有排名的五大因素
- Python:读取问题件并打印每一行
- UUID
- 并查集
- 批量保存数据
- 基础数论入门
- xml之DOM4J解析
- Mac环境下opencv for android笔记
- C++(6)继承与面向对象设计
- Thrift oneway关键字
- ubuntu下用过的命令 记录
- CDQZ Challenge 19
- tensorflow中的strides参数
- SCI\EI以及大学毕业论文 参考文献 在文章内的引用