数论的一些证明
来源:互联网 发布:手机分享电脑网络 编辑:程序博客网 时间:2024/05/29 07:45
目录
- 目录
- 欧几里得定理
- 用途
- 证明
- 代码
- 扩展欧几里得定理
- 用途
- 证明
- 代码
- 费马小定理
- 用途
- 证明
- 代码
- 递推求逆元
- 用途
- 证明
- 代码
- 欧拉-费马定理
- 用途
- 证明
- 代码
- Lucas定理
- 用途
- 证明
- 代码
- 威尔逊定理
- 用途
- 证明
- 欧几里得定理
1.欧几里得定理
用途
在
证明
首先,设
所以,
(证明不是很严谨。。。网上的证明自己看得也是很糊涂,还是喜欢自己证明一遍。)
代码
int gcd(int a,int b){ return (b==0?a:gcd(b,a%b));}
2.扩展欧几里得定理
用途
在
在
在
(弱弱地问一句,模反元素与逆元的区别是什么?【自我感觉是一样的,但是不知道为什么有两个名称】)
证明
原式
① 当
② 当
即
移项得到
然后就可以得到
然后通过回溯,得出
代码
int exgcd(int a,int b,int &x,int &y){ if (b==0) { x=1;y=0;return a; } int w=exgcd(b,a%b,x,y),t=x; x=y;y=t-a/b*y; return w;}
3.费马小定理
用途
在log的时间内求出
判断一个数是不是素数(即费马素性检验,一个随机化算法判断一个数是否是素数,但是有Carmichael数,会导致判断错误)
(丢个度娘的链接:费马素性检验、Carmichael数)
当模p不是素数的时候需要用到欧拉定理(欧拉定理什么的我还不会…)
证明
方法①:
首先,如果
假设,
即对于
则
即
两边同时除去
然后就可以得到
方法②:
需要用到后面介绍的欧拉-费马定理,因为
代码
//等我学会欧拉函数再来写p非素数的费马小定理求逆元LL pow(LL x,LL n,LL p)//快速算出x^n模p(为素数)后的值,求逆元的话,就是n=p-2{ LL res=1; while(n) { if (n&1) res=res*x%p; x=x*x%p; n>>=1; } return res;}
4.递推求逆元
用途
当需要求逆元的次数过多时就需要打个逆元表,这时候就需要用递推在
证明
首先,
然后,设
那么,很显然,
根据同余的性质,可以得到
把
再根据同余的性质,得到
代码
void makeinv(int n,int p){ inv[1]=1; for (int i=2;i<=n;i++) inv[i]=(p-p/i)*inv[p%i]%p;}
5.欧拉-费马定理
用途
求逆元,尤其是求
证明
首先,得知道一个定义:
设小于
那么,
① 证明不同余:
假设存在同余,那么就等于存在
因为
② 证明互质:
假设至少有一个数不与
设
经过上述的证明后,可以证明
(因为,小于
所以,
两边同时除去
这个式子也可以转换为
代码
与费马定理差不多,就是多了一个求
差点忘记介绍欧拉函数的两种做法,一种就是求与其互质数的个数(暴力…),还有一种就是求
6.Lucas定理
用途
在
证明
设
首先,得知道当
因为,
因为
而对于
所以,
对于①式中的
对于②式中的
所以,
Lucas定理得证
代码
LL pow(LL x,LL n,LL p){ LL res=1; while (n) { if (n&1) res=(res*x)%p; x=(x*x)%p; n>>=1; } return res;}LL C(LL n,LL k,LL p){ LL ret=1; while (n&&k) { LL q=n%p,r=k%p; if (q<r) return 0; ret=ret*fact[q]*pow(fact[r]*fact[q-r]%p,p-2,p)%p; //fact(x)表示x! n/=p;k/=p; } return ret;}
7.威尔逊定理
用途
表示自己不知道…求大佬告诉我(别告诉我就是定理的内容…)
证明
对于证明一个素数
首先,我们可以知道素数中唯一个偶数
对于一个奇素数,
根据乘法逆元的定义(乘法逆元,是指数学领域群
因为,对于一个数
所以,奇素数中,
所以,素数
- 数论的一些证明
- 经典证明:一个数论定理的组合学证明
- 【数论】关于乘法逆元的证明
- 一个关于数论中拉格朗日定理的证明
- 一些数论的公式
- 数论的一些定理
- 数论的一些公式
- 一些数论的公式
- 数论的一些函数
- 数论的一些公式
- 一些好玩的数论
- 【数论学习】数论分析证明
- Pi的一些猜想证明
- 一些NPC问题的证明
- 数论证明题(1)
- 数论之费马大定理及怀尔斯的证明
- 数论的欧拉证明:欧拉公式
- 数论的欧拉定理证明&欧拉函数公式
- 数字图像---之调色板
- 如何直接执行js代码
- Binder、AIDL学习笔记
- openVswitch(OVS)源代码分析之工作流程(数据包处理)
- nvm简介
- 数论的一些证明
- 使用windows10下搭建flask开发环境(python 3)
- 读书随笔1
- EOJ月赛总结
- linux两个线程交替打印数字
- unity 按钮绑定事件(NGUI UGUI)
- 常用命令
- javaScript 小结
- form表单验证,提交数据显示