数论2 同余、逆元和费马定理
今天我们来学习第二次数论。
我们首先要接触的是同余,意思就是a和b同时除以n,余数相等,记作A≡B(mod N),读作A和B模N同余。
这里“三道杠”的符号是全等号。
接下来基本上全是干货和公式,数学不好者慎入:
1,费马定理
费马定理分费马小定理和费马大定理,接下来分别介绍。
(作者声明:以下的公式属于中高级数学,包含同余式和费马小定理的应用,如果你数学不好,请先去恶补一下这些,再来读这一部分)
1,费马大定理
当整数n>2时,关于x,y,z的方程x^n+y^n=z^n没有正整数解。
这个定理据说是费马看古希腊数学家丢番图的文章时写下来的,但是他在公式末附了一句话:我可以用一个巧妙的方法来证明,可是纸太小了,我写不开。
因此费马犯了个大错误,直到现在也没人知道他的证明方法是什么。
(作者有话说:@费马 你附张纸不行嘛?)
这个以后详细介绍,今天我们主要讲费马小定理。
2,费马小定理
如果我们定义一个p为素数,且定义a和b,a%p≠0,则a^p-1≡1(mod p)。
接下来数学不好者慎入,我们要来证明他了:
首先创造一个集合x,包含所有小于p得数,显然p与集合里的所有数互质。
我们在定义一个集合X,用公式表示是a*x{1,......,p-1}%p=X{a%p,2a%p,......,(p-1)a%p},
将两个集合里的数分别相乘:(p-1)! % p=a^(p-1)*(p-1)! % p
把所有(p-1)!去掉,得到这个式子:
1(mod p)≡a^(p-1)(mod p),可以推出式子
a^(p-1)≡1(mod p)。
接下来的逆元,数学分数在A以下的请慎入。
逆元的概念可以这样理解:我们定义b和m,且b和m互质。定义a和b,且a是b的倍数。
则存在一个数x,使得a/b=a*x(mod m),即为b^-1(不是b的-1次方,这里是代表b的逆)(mod m)
接下来还是数学不好的慎入,我们要利用费马小定理证明逆元。
我们先列出一个等式:a/b%m=a*(b^-1)%m,前提是m是个素数。
然后我们把这个式子扩展一下:a/b*b*(b^-1)%m=a*(b^-1)%m。
因为/b和*b抵消了,把它们去掉,成了这样:1%m=b*(b^-1)%m
然后根据这个等式推出:b*(b^-1)≡1(mod m),也就是b*(b^(m-2))≡1(mod m)
接下来再接着推:(b^-1)%m=(b^(m-2))%m
我们把上面的式子化简一下,就得到了逆元的公式:b^(m-2)≡b^-1(mod m)。
光说公式可能有点晦涩,下面的解说是针对数学不太好的人设置的。
首先,你知道a除以b等于a乘b的逆(显而易见的一个公式)。
接着你有点闲,把上边的式子展开了:a除以b乘b乘b的逆等于a乘b的逆。(这一步看似没什么用,实际上后面的一系列推理全靠这个)
把这式子化简,你得到了一个结果:1模m等于b乘b的逆模m,借此你知道b乘b的逆和1模m同余。
接下来应用到了费马小定理,你利用上面的等式知道了b乘b的m-2次方也和1模m同余。所以你推出来b的逆模m等于b的m-2次方模m。
你又可以知道一个关系:b的m-2次方和b的逆模m同余。现在你已经推出来逆元的基本公式了。
接下来我们就要用代码来实现求逆元了。
题目,走起:
1,
越狱
时间限制:1秒 内存限制:128M
题目描述
监狱有连续编号为1...N的N个房间,每个房间关押一个犯人,有M种宗教,每个犯人可能信仰其中一种。如果相邻房间的犯人的宗教相同,就可能发生越狱,求有多少种状态可能发生越狱。
输入描述
输入两个整数M,N.1<=M<=1e8,1<=N<=1e8。
输出描述
输出可能的越狱状态数,对2020取模。
样例
输入
2 3
输出
6
解析:
这个题实际上是让两个人的信仰相同。
但是这样不好算,怎么办?
我们可以用所有的情况数量减去不可能越狱的情况,就是可能越狱的情况了。
注意:这里涉及到了快速幂和前缀和,复习一下吧。
long long ksm(long long x,long long y)
{long long sum=1,t=x%2020;while(y){if(y&1) sum=sum*t%2020;t=t*t%2020;y>>=1;}return sum%2020;
}
int main()
{//cinlong long ans=(ksm(m,n)-(m*ksm(m-1,n-1))%2020+2020)%2020;//coutreturn 0;
}
(作者有话说:其实还有一种快速乘法,就是把快速幂的代码改一改。代码如下:
/*快速乘(y个x相加)
long long ksc(long long x,long long y)
{
long long sum=1,t=x%2020;
while(y)
{
if(y&1) sum=(sum+t)%2020;
t=(t+t)%2020;
y>>=1;
}
return sum%2020;
}
*/
还有一种更快的快速乘,我们以后再讲。)
2,车的放置
时间限制:1秒 内存限制:128M
题目描述
有下面这样的一个网格棋盘,a,b,c,d 表示了对应边长度,也就是对应格子数 :
要在这个棋盘上放 k 个相互不攻击的车,也就是这 k 个车没有两个车在同一行,也没有两个车在同一列,问有多少种方案。(注:输出答案 %100003 后的结果。)
输入描述
共一行,五个非负整数 a,b,c,d,k(1≤a,b,c,d,k≤1000)
输出描述
包括一个正整数,为答案 mod100003 后的结果。保证至少有一种可行方案
样例
输入
2 2 2 2 2
输出
38
提示
解析:
这个题可以通过画图来解决,我们假设地图是这样的:
因为象棋里的车能吃掉跟他同一行或同一列的棋子,所以车不能放在与任何一辆车同行同列的地方。
按照之前的地图,总共的方法就是:
C(a,k)*A(b,k)(行上的和列上的)
但是实际的地图是这样:
你以为这样就求不出来了?错!
我们可以把他划一刀,切成两个图1的形状,这样就好算了:
上边能放i个子,下面就只能放k-i个,有a+c-i列可以放。
我们只需要分别求两个图形里的方案数量,再相乘。
上半部分是C(b,i)*A(a,i)
下半部分是C(d,k-i)*A(a+c-i,k-i)
再把他们乘起来就行了。
这个题是橙区代码,有点多
long long ksm(long long x,long long y)
{long long sum=1;x%=mod;while(y){if(y&1) sum=(sum*x)%mod;x=(x*x)%mod;y>>=1;}return sum%mod;
}
long long C(int a,int b)
{if(a<b) return 0;return fac[a]*infac[b]%mod*infac[a-b]%mod;
}
long long A(int a,int b)
{if(a<b) return 0;return fac[a]*infac[a-b]%mod;
}
int main()
{fac[0]=infac[0]=1;for(int i=1;i<=N-1;i++){fac[i]=fac[i-1]*i%mod;infac[i]=infac[i-1]*ksm(i,mod-2)%mod;//逆元来喽}//cinfor(int i=0;i<=k;i++) ans=(ans+C(b,i)*A(a,i)%mod*C(d,k-i)*A(a+c-i,k-i)%mod)%mod;//cout
}
好了,今天的课就到这里了,再见~
数论2 同余、逆元和费马定理相关推荐
- 转载==数论倒数,又称逆元(我整个人都倒了( ̄﹏ ̄))
数论倒数,又称逆元(我整个人都倒了( ̄﹏ ̄)) 数论倒数,又称逆元(因为我说习惯逆元了,下面我都说逆元) 数论中的倒数是有特别的意义滴 你以为a的倒数在数论中还是1/a吗 (・∀・)哼哼~天真 先来引 ...
- 数论:从同余的观点出发
<数论:从同余的观点出发> 基本信息 作者: 蔡天新 [作译者介绍] 出版社:高等教育出版社 ISBN:9787040348347 上架时间:2012-9-13 出版日期:2012 年9月 ...
- 第二十七章 数论——快速幂与逆元
第二十七章 快速幂与扩展欧几里德算法 一.快速幂 1.使用场景 2.算法思路 (1)二进制优化思想 (2)模运算法则 3.代码实现 (1)问题 (2)代码 二.快速幂求逆元 1.什么是逆元? (1)同 ...
- NOIP2014 uoj20解方程 数论(同余)
又是数论题 Q&A Q:你TM做数论上瘾了吗 A:没办法我数论太差了,得多练(shui)啊 题意 题目描述 已知多项式方程: a0+a1x+a2x^2+..+anx^n=0 求这个方程在[1, ...
- 【数论】同余(五):多元线性同余方程
同余问题共7part,我的博客链接: 基本概念与性质 逆元:概念.求解方法与推导 线性同余方程 一元线性同余方程 一元线性同余方程组 多元线性同余方程 高次同余方程:BSGS算法(大小步算法.拔山盖世 ...
- 【数论】同余(四):一元线性同余方程组(两两相消、中国剩余定理)
同余问题共7part,我的博客链接: 基本概念与性质 逆元:概念.求解方法与推导 线性同余方程 一元线性同余方程 一元线性同余方程组 多元线性同余方程 高次同余方程:BSGS算法(大小步算法.拔山盖世 ...
- 【数论】同余(一):同余的基本概念与性质
同余问题共7part,我的博客链接: 基本概念与性质 逆元:概念.求解方法与推导 线性同余方程 一元线性同余方程 一元线性同余方程组 多元线性同余方程 高次同余方程:BSGS算法(大小步算法.拔山盖世 ...
- 数论初步——同余与模算术
具体内容见紫书p314-p316 一.a mod b a mod b:a除以b的余数,C语言表达式是a % b,且b!=0 二.模线性方程组 题目:输入正整数a,b,n,解方程ax ≡ b(mod n ...
- 数论作业 —— 同余理论
求 14 5 89 + 3 2002 145^{89}+3^{2002} 14589+32002 除以 13 13 13 的余数 知识点 同余理论. 解 ∵ 145 = 11 × 13 + 2 \be ...
最新文章
- JS如何深度复制对象和数组,避免指针变量引用修改值
- 项目管理工具到底应该为谁服务?
- 一行文章让你搞懂什么是前缀、中缀、后缀表达式以及它们之间的相互转换
- 【图像处理】——Python实现图像特征提取BP神经网络实现图像二分类
- Oracle入门(十二G1)修改序列(Sequence)起始值的方法
- centos在文本中搜索字符串_linux(centos8):用grep命令查找文件内容
- 课后作业-阅读任务3
- UI设计干货模板|输入框设计临摹素材
- php留言簿,PHP 简易留言板
- ssis行计数变量_SSIS服务性能计数器指南
- ABTest灰度发布
- Linux之Firewall防火墙、iptables、firewalld
- Office for Mac升级提醒如何去掉?关闭Mac的Microsoft AutoUpdate弹框提示
- WEB前端资源项目整合
- ASP.NET Core 引用其他程序集项目里面的 Controller 控制器
- PaddlePaddle (飞桨) - 开源深度学习平台
- svg适配低版本android,SVG-Android开源库——SVG图片兼容及性能优化解决方案
- python爬虫系列序
- 常用的数据库统计SQL语句(2)
- 【VisionMaster 行业应用案例】第二讲 多相机定位引导应用
热门文章
- 努力学Java挣小钱钱
- E. Pencils and Boxes(划窗+dp+树状数组)
- python3.7 openpyxl 在excel单元格中写入数据
- Ubuntu16.04下Qt交叉编译开发环境搭建
- 经常宕机的RAC系统 -排查案例
- 《人月神话》(The Mythical Man-Month)3 外科手术队伍(The Surgical Team)
- Asis2016 books null off by one
- Unicode、UTF-8、ASCII等编码方式浅述
- Asp.Net使用加密cookie代替session验证用户登录状态 源码分享 欢迎拍砖
- 怎么为图片、视频设置打开方式