今天我们来学习第二次数论。

我们首先要接触的是同余,意思就是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 同余、逆元和费马定理相关推荐

  1. 转载==数论倒数,又称逆元(我整个人都倒了( ̄﹏ ̄))

    数论倒数,又称逆元(我整个人都倒了( ̄﹏ ̄)) 数论倒数,又称逆元(因为我说习惯逆元了,下面我都说逆元) 数论中的倒数是有特别的意义滴 你以为a的倒数在数论中还是1/a吗 (・∀・)哼哼~天真 先来引 ...

  2. 数论:从同余的观点出发

    <数论:从同余的观点出发> 基本信息 作者: 蔡天新 [作译者介绍] 出版社:高等教育出版社 ISBN:9787040348347 上架时间:2012-9-13 出版日期:2012 年9月 ...

  3. 第二十七章 数论——快速幂与逆元

    第二十七章 快速幂与扩展欧几里德算法 一.快速幂 1.使用场景 2.算法思路 (1)二进制优化思想 (2)模运算法则 3.代码实现 (1)问题 (2)代码 二.快速幂求逆元 1.什么是逆元? (1)同 ...

  4. NOIP2014 uoj20解方程 数论(同余)

    又是数论题 Q&A Q:你TM做数论上瘾了吗 A:没办法我数论太差了,得多练(shui)啊 题意 题目描述 已知多项式方程: a0+a1x+a2x^2+..+anx^n=0 求这个方程在[1, ...

  5. 【数论】同余(五):多元线性同余方程

    同余问题共7part,我的博客链接: 基本概念与性质 逆元:概念.求解方法与推导 线性同余方程 一元线性同余方程 一元线性同余方程组 多元线性同余方程 高次同余方程:BSGS算法(大小步算法.拔山盖世 ...

  6. 【数论】同余(四):一元线性同余方程组(两两相消、中国剩余定理)

    同余问题共7part,我的博客链接: 基本概念与性质 逆元:概念.求解方法与推导 线性同余方程 一元线性同余方程 一元线性同余方程组 多元线性同余方程 高次同余方程:BSGS算法(大小步算法.拔山盖世 ...

  7. 【数论】同余(一):同余的基本概念与性质

    同余问题共7part,我的博客链接: 基本概念与性质 逆元:概念.求解方法与推导 线性同余方程 一元线性同余方程 一元线性同余方程组 多元线性同余方程 高次同余方程:BSGS算法(大小步算法.拔山盖世 ...

  8. 数论初步——同余与模算术

    具体内容见紫书p314-p316 一.a mod b a mod b:a除以b的余数,C语言表达式是a % b,且b!=0 二.模线性方程组 题目:输入正整数a,b,n,解方程ax ≡ b(mod n ...

  9. 数论作业 —— 同余理论

    求 14 5 89 + 3 2002 145^{89}+3^{2002} 14589+32002 除以 13 13 13 的余数 知识点 同余理论. 解 ∵ 145 = 11 × 13 + 2 \be ...

最新文章

  1. JS如何深度复制对象和数组,避免指针变量引用修改值
  2. 项目管理工具到底应该为谁服务?
  3. 一行文章让你搞懂什么是前缀、中缀、后缀表达式以及它们之间的相互转换
  4. 【图像处理】——Python实现图像特征提取BP神经网络实现图像二分类
  5. Oracle入门(十二G1)修改序列(Sequence)起始值的方法
  6. centos在文本中搜索字符串_linux(centos8):用grep命令查找文件内容
  7. 课后作业-阅读任务3
  8. UI设计干货模板|输入框设计临摹素材
  9. php留言簿,PHP 简易留言板
  10. ssis行计数变量_SSIS服务性能计数器指南
  11. ABTest灰度发布
  12. Linux之Firewall防火墙、iptables、firewalld
  13. Office for Mac升级提醒如何去掉?关闭Mac的Microsoft AutoUpdate弹框提示
  14. WEB前端资源项目整合
  15. ASP.NET Core 引用其他程序集项目里面的 Controller 控制器
  16. PaddlePaddle (飞桨) - 开源深度学习平台
  17. svg适配低版本android,SVG-Android开源库——SVG图片兼容及性能优化解决方案
  18. python爬虫系列序
  19. 常用的数据库统计SQL语句(2)
  20. 【VisionMaster 行业应用案例】第二讲 多相机定位引导应用

热门文章

  1. 努力学Java挣小钱钱
  2. E. Pencils and Boxes(划窗+dp+树状数组)
  3. python3.7 openpyxl 在excel单元格中写入数据
  4. Ubuntu16.04下Qt交叉编译开发环境搭建
  5. 经常宕机的RAC系统 -排查案例
  6. 《人月神话》(The Mythical Man-Month)3 外科手术队伍(The Surgical Team)
  7. Asis2016 books null off by one
  8. Unicode、UTF-8、ASCII等编码方式浅述
  9. Asp.Net使用加密cookie代替session验证用户登录状态 源码分享 欢迎拍砖
  10. 怎么为图片、视频设置打开方式