文章目录

  • 初等数论基础(二)
  • 建议先看
  • 零、同余与逆元的概念
    • 0.1 同余
    • 0.2 逆元概念
      • 0.2.1 逆元的求法
  • 一、数论只会gcd
    • 1.1 gcd
      • 1.1.1 (a,b) = (a,a+b) 的证明
      • 1.1.2 (a,b) = (b,a%b)的证明
      • 辗转相除法代码:
      • 辗转相除法时间复杂度
    • 1.2 当然还会exgcd
      • 1.2.1 裴蜀定理
      • 1.2.2 ax+by = gcd(a,b)的求解
  • 二、欧拉相关
    • 2.1 欧拉函数
    • 2.2 欧拉定理相关
      • 2.2.1 欧拉定理与费马小定理
        • 2.2.1.1 欧拉定理
        • 2.2.1.2 费马小定理
        • 2.2.1.3 乘法逆元
      • 2.2.2 扩展欧拉定理
      • 2.2.3 光速幂
  • 三、同余方程相关与逆元求解
    • 3.1 线性同余方程
      • 3.1.2 威尔逊定理
    • 3.2 逆元求解
      • 3.2.1 exgcd求逆元
      • 3.2.2 快速幂求逆元
    • 3.3 中国剩余定理(CRT)
  • 参考

初等数论基础(二)

建议先看

初等数论基础(一)~

零、同余与逆元的概念

本来想直接记逆元的,但是发现初等数论基础一没有讲同余,于是先给出同余的概念:

0.1 同余

同余:若整数a和整数b除以m的余数相等,则称a,b模m同余,记为
a≡b(modm)a \equiv b(mod \quad m)a≡b(modm)
对于同余的概念需要掌握,另外有关于同余类和剩余系的概念,了解即可:

其实同余类和离散数学的等价类类似。
另外:同余具有传递性,也可以做加减:

0.2 逆元概念

对于正整数a和m,如果有am与1在模m意义下同余,那么这个同余方程中x的最小正整数解叫做a%m的逆元
注:逆元与乘法逆元不一样,除乘法逆元外还有加法逆元、卷积逆元、矩阵逆元等。

ax≡1(modb),则称x是a关于模b的逆元ax\equiv 1(mod\quad b),则称x是a关于模b的逆元 ax≡1(modb),则称x是a关于模b的逆元
一般把一个数a的逆元记为a−1一般把一个数a的逆元记为a^{-1}一般把一个数a的逆元记为a−1

0.2.1 逆元的求法

1.exgcd求逆元
2.如果m是质数,可以通过快速幂求逆元(费马小定理)
3.如果模数是素数,可以O(n) 线性递推求逆元

方法1和方法2将在后面的内容中讲到,读者往后看即可,这里先给出第三种方法,线性递推求逆元

首先定义1的逆元是1,因为1显然与1同余

于是有代码:

typedef long long ll;
inv[i] = (1ll*(p-p/i)*inv[p%i])%p;

一、数论只会gcd

1.1 gcd

1.1.1 (a,b) = (a,a+b) 的证明

(a,a) = (a,0) = a(显然)
(a,b) = (a,a+b)  = (a,ka+b)

(a,b) = (b,a%b)

1.1.2 (a,b) = (b,a%b)的证明

也叫辗转相除法

注意:gcd(a,b) = 1说明a和b互质。
另外:gcd(1,1) = 1,gcd(a,0) = a,gcd(a,1) = 1

辗转相除法代码:

ll gcd(ll a,ll b)
{return b?gcd(b,a%b):a;
}
//或者写成
ll gcd(ll a,ll b)
{if(b==0){return a;}return gcd(b,a%b);
}

辗转相除法时间复杂度

只知道是小于log2(b)的呜呜呜
小于log2(b) 很好证:
只需要证a%b<b/2就可以了

1.2 当然还会exgcd

啥?除了gcd还有exgcd????
在欧几里得求得gcd(a,b)以后,大家并不满足,于是好奇一个方程的解:
ax+by=gcd(a,b)已知a,b,求一组x,y使得方程成立ax+by = gcd(a,b) \\已知a,b,求一组x,y使得方程成立 ax+by=gcd(a,b)已知a,b,求一组x,y使得方程成立
在将这个方程的解之前需要介绍裴蜀定理:

1.2.1 裴蜀定理

∀a,b,∃x,ys.t.ax+by=gcd(a,b)\forall a,b ,\exists x,y \quad s.t. \quad ax+by = gcd(a,b) ∀a,b,∃x,ys.t.ax+by=gcd(a,b)
哈,其实就是说1.2的方程一定是有解的

1.2.2 ax+by = gcd(a,b)的求解

先构造:
显然当b = 0时,有x = 1,y = 任意值(一般写成0)
对于b!=0的情况:

只要每次先把(2)式求出,那么(1)式的解也能出来了:)
代码:

#include<bits/stdc++.h>
using namespace std;const int N = 1e5+10;
int exgcd(int a,int b,int &x,int &y)
{if(!b){x = 1,y = 0;return a;}int d = exgcd(b,a%b,y,x);y-=a/b*x;return d;
}
int main()
{int n;cin>>n;while(n--){int a,b,x,y;cin>>a>>b;exgcd(a,b,x,y);cout<<x<<' '<<y<<endl;}return 0;
}

这里给出例题:)例题链接

分析:题目要求ax+by=c的解:
令d = gcd(a,b),显然只有c%d==0即d|c时该方程有解。
我们通过exgcd先求出ax+by=d的一组特解x0,y0,然后该方程的一组特解x1,y1通过x0,y0分别乘上c/d即可得到
而通解如何求解呢?
显然可以通过先求得的特解推通解,k是任意整数,显然加号和减号的位置可以互相交换。

二、欧拉相关

2.1 欧拉函数


详细定义见:初等数论基础一

2.2 欧拉定理相关

2.2.1 欧拉定理与费马小定理

2.2.1.1 欧拉定理


记为:

说人话就是:对于任意a与n互质,即有a的φ(n)次方与1在模n意义下同余。
例:
φ(7)=6,3φ(7)=36%7≡1(mod7)\varphi(7) = 6,\quad 3^{\varphi(7)} = 3^6\%7 \equiv1(\mod 7) φ(7)=6,3φ(7)=36%7≡1(mod7)

2.2.1.2 费马小定理

2.2.1.3 乘法逆元

例题:例题链接
容易发现,费马小定理就是欧拉定理的特殊情况。

2.2.2 扩展欧拉定理


引申:
若b>φ(n),则ab≡ab%φ(n)+φ(n)(modn)若b>\varphi(n),则a^b \equiv a^{b\%\varphi(n)+\varphi(n)}( mod \quad n) 若b>φ(n),则ab≡ab%φ(n)+φ(n)(modn)
例题:
最幸运的数字

2.2.3 光速幂

例题:P5110

三、同余方程相关与逆元求解

3.1 线性同余方程

例题:线性同余方程


所以,当线性同余方程有解时只需要先用exgcd求解
ax+my=gcd(a,m),得到一组特解x0,y0然后x=x0∗b/gcd(a,m)即是原线性同余方程的一个解。ax+my = gcd(a,m),得到一组特解x0,y0\\ 然后x = x0*b/gcd(a,m)即是原线性同余方程的一个解。 ax+my=gcd(a,m),得到一组特解x0,y0然后x=x0∗b/gcd(a,m)即是原线性同余方程的一个解。
容易发现:
线性同余方程ax≡b(modm)即转化为ax+my=b,然后通过exgcd求解ax\equiv b(mod\quad m)\\即转化为ax+my=b,然后通过exgcd求解ax≡b(modm)即转化为ax+my=b,然后通过exgcd求解
例题链接

#include<bits/stdc++.h>
using namespace std;typedef long long ll;
ll a,b,x,y;ll exgcd(ll a,ll b,ll &x,ll &y)
{if(!b){x = 1,y = 0;return a;}ll d = exgcd(b,a%b,y,x);y -= a/b*x;return d;
}
int main()
{ll a,b,x,y;cin>>a>>b;exgcd(a,b,x,y);cout<<(x%b+b)%b;
}

3.1.2 威尔逊定理

(p-1)的阶乘在模p意义下与-1同余。
(p−1)!≡−1(modp)(p-1)!\equiv -1(mod\quad p)(p−1)!≡−1(modp)

3.2 逆元求解

3.2.1 exgcd求逆元

我们知道:若ax≡1(modb)ax\equiv 1(mod\quad b)ax≡1(modb),则由线性同余方程可以转化为
ax+by=1ax+by=1ax+by=1
那么可以直接调用扩展欧几里得算法求逆元。

3.2.2 快速幂求逆元

如果b为质数,则φ(b)=b−1再由欧拉定理:∴ab−1≡1(modb)∵a∗ab−2=ab−1∴a在模b意义下的逆元就是ab−2\varphi(b)=b-1\\再由欧拉定理:\\ \therefore a^{b-1} \equiv 1(mod\quad b)\\ \because a*a^{b-2} = a^{b-1}\\ \therefore a在模b意义下的逆元就是a^{b-2}φ(b)=b−1再由欧拉定理:∴ab−1≡1(modb)∵a∗ab−2=ab−1∴a在模b意义下的逆元就是ab−2
于是可以快速幂求啦!

3.3 中国剩余定理(CRT)

中国剩余定理是干嘛的呢?

例如解以下方程组:

参考

《算法竞赛进阶指南》
大佬博客
这位大佬的博客激励我继续前进
关于同余的传递性和加减法的证明

数论学习-初等数论基础总览相关推荐

  1. 《繁凡的深度学习笔记》前言、目录大纲 一文让你完全弄懂深度学习所有基础(DL笔记整理系列)

    <繁凡的深度学习笔记>前言.目录大纲 (DL笔记整理系列) 一文弄懂深度学习所有基础 ! 3043331995@qq.com https://fanfansann.blog.csdn.ne ...

  2. 孙立岩 python-basic: 用于学习python基础的课件(一二三四)

    python-basic: 用于学习python基础的课件 介绍 此部分讲解Python的基础,点击目录学习对应的小节: 01-简介,概述一下python: 02-环境搭建,如何在大家自己的windo ...

  3. 周志华教授专著《集成学习:基础与算法》上市,破解AI实践难题

    [ 摘要 ]<集成学习:基础与算法>上市一周,斩获京东IT新书销量榜第一名桂冠,并拿下京东IT图书销量总榜第二名的惊人成绩. 文中有数据派独家福利哦 本书共读活动已正式开启,文末加入读者交 ...

  4. Expression Blend学习动画基础

    原文:Expression Blend学习动画基础 什么是动画(Animation)? 动画就是时间+换面的组合,画面跟着时间变化.最常见的是flash的动画,还有GIF动态图片. 动画的主要元素 时 ...

  5. 电脑硬件知识学习_学习计算机基础必读的4本经典入门书籍,自学编程必备书单!...

    点击蓝色"程序员书单"关注我哟 加个"星标",每天带你看好文,读好书! 文/黄小斜 转载请注明出处 新手学习计算机并非易事,作为一个自学编程的过来人,深知打好计 ...

  6. linux shell概述,Linux学习 -- Shell基础 -- 概述

    Shell是什么? 命令解释器 编程语言 Linux支持的Shell类型 cat /etc/shells 主要学习 bash 脚本执行方式 echo echo -e 单引号 -- 原始字符串  双引号 ...

  7. 没学过python、但是还是有公司要-学习python 基础都会了 为什么还是做不出项目呢?...

    原标题:学习python 基础都会了 为什么还是做不出项目呢? Python是一门足够简单但又非常强大的程序语言,应用领域甲冠天下,在WEB开发.WEB爬虫.科学计算.人工智能.云计算.数据分析.数据 ...

  8. python基础语法及知识总结-Python 学习完基础语法知识后,如何进一步提高?

    ---4.30更新---感谢大家支持,点赞都破两千了.给大家整理出来新的资料,需要的小伙伴来自取: Python练手项目视频如下: Python自学基础知识如下: 以下为原文内容: Python 学习 ...

  9. python语言的单行注释以井号开头_推荐|零基础学习Python基础知识

    原标题:推荐|零基础学习Python基础知识 Python是一种面向对象.解释型计算机程序设计语言.语法简洁清晰,强制用空白符作为语句缩进. Python具有丰富和强大的库,又被称为胶水语言.能把其他 ...

  10. 深度学习的基础知识(机器学习、损失函数、梯度下降、反向传播、基础模型一网打尽)

    1.预备信息 1.1了解技术的发展阶段 技术一般存在几个阶段:1.发展期.2.高峰期.3.冰河期.4.应用期 就是先达到一个高峰,但是在达到高峰之后就会被发现很多问题,然后热度就会不断地下降,到达一个 ...

最新文章

  1. MultipartResolver实现文件上传功能
  2. Delphi2010使用TImage打开jpeg图片错误的处理
  3. WCF RIA 服务 (三十二)-- 身份验证、角色、个性化 3
  4. 廖雪峰python教程书-Python 爬虫:把廖雪峰的教程转换成 PDF 电子书
  5. Visual Studio 2017常用快捷键(小白入)
  6. javascript之作用域
  7. python分配buffer_Node.js中的buffer如何和python中的buffer相对应
  8. 【机器学习】一文解决样本不均衡(全)
  9. Type mismatch: cannot convert from int to Object错误
  10. 常用Docker 镜像命令(二)
  11. java的过滤器_java过滤器
  12. 时间触发协议(Time triggered protocol)概述
  13. 【舆情分析(5)】 情感倾向分析之鲁迅《祝福》里对祥林嫂(特定人物)的情感倾向
  14. 服务器可不可以选择ssd硬盘
  15. java汉诺塔(含汉诺塔问题的详解)
  16. 5+App和uni-app在App开发上有何区别?
  17. 机器学习算法实践-SVM中的SMO算法
  18. 黑苹果安装教程及相关问题处理心得
  19. docker-compose搭建seafile开源版私有云盘
  20. 32位系统能够识别多达内存_C ++程序可打印多达N个术语的卢卡斯系列

热门文章

  1. 拆t460拆机图解_ThinkPad T460P评测,二楼附ThinkPad T460P拆机图
  2. 升级qq群一直显示服务器失败怎么回事啊,QQ群创建失败是怎么回事,QQ群创建失败原因是什么...
  3. Warez出品的精品动画,近25万倍的压缩,大小仅有64K的
  4. 集查询IP地址信息、查询手机号码信息、查询身份证号信息的一个小程序
  5. 2018-3-18CCF小球碰撞问题
  6. 背包DP入门笔记(1) 骨头收集 HDU-2602
  7. 遥感专业学c语言吗,2019遥感科学与技术专业怎么样、学什么、前景好吗
  8. DNS反劫持的几种方式
  9. 抽象代数的代码实现(1) 置换群
  10. 计算机电路电子技术试题答案,数字电子技术试题库及答案解析知识分享