同余基本概念


剩余系


欧拉函数

欧拉函数φ(n)表示1~n中所有与n互质的数。比如1~8中与8互质的数有1,3,5,7,所以φ(8)=4。

公式1:如果p是素数,有φ(p)=p-1。

公式2(积性):如果(a,b)=1,有φ(a*b)=φ(a)*φ(b),

--->以下是公式二的证明过程

设模a的一个简系为a1,a2,a3,…,aφ(a),模b的一个简系为b1,b2,b3,…,bφ(b) 现在我们要证明:所有ai∗b+bj∗a(共φ(a)*φ(b)个)组成了模a*b的一个简系(即φ(a*b)=φ(a)*φ(b))。 判定简系需要证明下面三点:

  1. (ai∗b+bj∗a,a∗b)=1。

  2. ai∗b+bj∗a≢ak∗b+bt∗a(mod a∗b)(i!=k或j!=t)

  3. 对于任意k满足(k,a*b)=1,则一定有k≡ai∗b+bj∗a(mod a∗b)(即没有遗漏)

证明1:  (ai∗b+bj∗a,a∗b)=1。

因为(a,ai)=1,(a,b)=1,所以(a,ai*b)=1,由辗转相除法可得(a,ai*b+bj*a)=(a,ai*b)=1,同理得(b,ai*b+bj*a)=1。 所以1得证。

证明2:  ai∗b+bj∗a≢ak∗b+bt∗a(mod a∗b)(i!=k或j!=t)

证明3: 对于任意k满足(k,a*b)=1,则一定有k≡ai∗b+bj∗a(mod a∗b)

所以φ(n)是积性函数(但不是完全积性,因为要满足(a,b)=1)。 有了这个公式,就可以推得欧拉函数的通项公式。

又因任意两个p互质(没有共同质因子),

所以:

公式4:欧拉函数的通项公式


求欧拉函数值

1.如果只求φ(n),唯一分解 那么我们就直接将n唯一分解处理出每一个n的素数,然后用通项公式就行了。 效率:O(√n)

2、如果要求φ(1~n) 用唯一分解就比较慢了,所以我们可以用筛法求出φ(1~n),原理和筛素数是一样的。普通筛法用到的是通项公式,而线性筛法用到公式1、公式2(积性)和公式3。

普通筛法代码:

线性筛法代码:

解释一下上面代码make_phi函数里的第一个循环(下图中的x即循环中的i)

这里附几道求欧拉函数值的习题:

洛谷 P2303 [SDOi2012]Longge的问题

--->题解

洛谷 P2568 GCD

--->题解


模运算

【同余的几个性质】

性质1:a≡a(mod m),(自反性)

性质2:若a≡b(mod m),那么b≡a(mod m)(对称性)

性质3:若a≡b(mod m),b≡c(mod m)=>a≡c(mod m)(传递性)

性质4:若a≡b(mod m),c≡d(mod m),那么a±c≡b±d(mod m)(可加减性)

证明:设a=A+Ka*m,b=A+Kb*m,c=C+Kc*m,d=C+Kd*m则(a±c)%m=(A±C),(b±d)%m=(A±C)即a±c≡b±d(mod m)

性质5:若a≡b(mod m),c≡d(mod m),那么ac≡bd(mod m)(可乘性)

证明:设a=A+Ka*m,b=A+Kb*m,c=C+Kc*m,d=C+Kd*m则ac=( A+Ka*m)( C+Kc*m),bd=( A+Kb*m)( C+Kd*m)所以ac%m=AC bd%m=AC即ac≡bd(mod m)

性质6:若a≡b(mod m),那么an≡bn(mod m)(其中n为自然数)

证明:由性质1和性质5得。

性质7:若ac≡bc(mod m),(c,m)=1,那么a≡b(mod m)

证明:ac≡bc(mod m)=>c(a-b)≡0(mod m)=>c%m*(a-b)%m=0 =>m|c或m|(a-b)又因为(m,c)=1.所以m|(a-b)即a≡b(mod m)

性质8:若a≡b(mod m),那么a^t≡b^t(mod m)

证明:由性质5得。

性质9:若 a≡b(mod m1) a≡b(mod m2)…. a≡b(mod mk) 则 a≡b(mod [m1,m2……mk])

证明:由题意得mi|(a-b) (1<=i<=k)即(a-b)是mi的公倍数,所以[m1,m2……mk]|(a-b)即a≡b(mod [m1,m2……mk])


欧拉定理

若正整数a、n互素,有:

消去律:如果 gcd(c,p) = 1 ,则 ac ≡ bc mod p ⇒ a ≡ b mod p 。


费马小定理

若正整数 a 与素数 p 互质,则有 a^(p-1) ≡ 1 mod p。

证明这个定理非常简单,由于 φ(p) = p -1,代入欧拉定理即可证明。


欧拉定理的推论


扩展欧几里得算法

欧几里得定理,即gcd(a,b)=gcd(b,a mod b)

定理1:如果a、b是不全为0的整数,那么一定存在整数x、y使得ax+by=gcd(a,b)。

对于线性同余方程

可以改写成ax+ny=b的形式

如何求解 (以下讨论a>b):

当 b=0,gcd(a,b)=a。此时 x=1,y=0;(特解)

当a>b>0 时 设 ax1+ by1= gcd(a,b);

bx2+ (a mod b)y2= gcd(b,a mod b);

根据欧几里德原理有 gcd(a,b) = gcd(b,a mod b);

则:ax1+ by1= bx2+ (a mod b)y2;

即:ax1+ by1= bx2+ (a - [a / b] * b)y2 = ay2+ bx2- [a / b] * by2;

(a mod b = a - [a / b]*b;[a / b]为a整除b) 也就是ax1+ by1 = ay2 + b(x2- [a / b] *y2);

根据恒等定理得:x1=y2;y1=x2- [a / b] *y2;

这样就得到了求解 x1,y1 的方法:x1,y1 的值基于 x2,y2 :

引理:

ax+by = z,z为gcd(a,b)若干倍,求方程的解;

先求解ax+by = gcd(a,b),再将求出的解乘以 z/gcd(a,b)就好了。

求得了方程ax+by=gcd的一组特解为x0,y0;

通解:

  • 如果a,b互质通解为x=x0+b*t, y=y0-a*t;

  • 如果a,b不互质通解为x=x0+b/gcd*t, y=y0-a/gcd*t;

最小正整数解:X=(x0%(b/gcd)+b/gcd)%(b/gcd);


板子题来喽——

[NOIP2012]同余方程(信息学奥赛一本通 1872)

【题目描述】

求关于 x 的同余方程 ax≡1(modb)  的最小正整数解。

【输入】

输入只有一行,包含两个正整数 a,b,用一个空格隔开。

【输出】

输出只有一行,包含一个正整数 x0 ,即最小正整数解。输入数据保证一定有解。

【输入样例】

3 10

【输出样例】

7


模意义下乘法的逆元

求逆元

一、使用欧拉定理求逆元(a,m互质)

二、使用扩展欧几里得求逆元(a,m互质)

同余方程ax≡1(mod m)的最小正整数解即为a的逆元

线性求逆元:递推法

求1~M模M的所有逆元,M为质数。用快速幂一个个求复杂度O(MlogM) 对于1000000以上级别的素数,有更优秀的求逆元算法,递推式如下:

推导过程:设t=M/i , k=M%i

对上式两边同时除i*k ,进一步得到

再把t,k替换回来,得到

初始化 inv[1]=1 ,这样就可以通过递推法求出1~M模素数 M的所有逆元了。


练练手——

Sumdiv(信息学奥赛一本通 1633)

【题目描述】

求 AB 的所有约数之和 mod9901。

【输入】

输入两个整数 A,B。

【输出】

输出答案 mod9901。

【输入样例】

2 3

【输出样例】

15

别着急,我的博客后面还有同余问题2呢

转载于:https://www.cnblogs.com/ljy-endl/p/11403077.html

同余问题1(超详细!!!)相关推荐

  1. 大学计算机基础知识点图文,大学计算机基础知识点超详细总结

    大学计算机基础知识点超详细总结 第一章 计算机及信息技术概述1. 电子计算机的发展历程①1946 年 2 月由宾夕法尼亚大学研制成功的 ENIAC 是世界上第一台电子数字计算机. "诞生了一 ...

  2. 大学计算机基础超详细知识点(高手总结),大学计算机基础超详细知识点(高手总结).doc...

    大学计算机基础超详细知识点(高手总结).doc 第一章 计算机及信息技术概述 电子计算机的发展历程 ①1946年2月由宾夕法尼亚大学研制成功的ENIAC是世界上第一台电子数字计算机."诞生了 ...

  3. 呕心沥血 JavaScript知识点梳理大全,超详细 建议收藏!!!

    呕心沥血 JavaScript知识点梳理大全,超详细 建议收藏!!! ✴️大家好,我是王同学,爆肝三天三夜王同学把JavaScript 知识点梳理了一遍,文章没有一点套路,只有满满的干货 ✴️如果对你 ...

  4. 学习javascript这一篇就够了超详细笔记(建议收藏)上

    学习javascript这一篇就够了超详细笔记(建议收藏)上 1.初识 计算机基础导读 编程语言 计算机基础 初识js 浏览器执行 js组成 js初体验-三种书写位置 js注释 js输入输出语句 2. ...

  5. 软件测试流程(萌新专属)【超详细】-酸奶公园

    软件测试流程(小白专属)[超详细]-酸奶公园 验证输入与输出的信息是否一致 输入框之前的标题是否正确 对Tab字符的处理机制 按下ctr |和alt键对输入框的影响 对于有约束条件要求的输入框应在条件 ...

  6. 电脑技巧全书(超详细.)

    目录检索(相关文章在对应的目录下找~~)~~ 1.最全的windows操作系统快捷键-------------------------------------1楼   2.Windows 开始→运行→ ...

  7. Jenkins详细安装配置部署--超详细

    Jenkins详细安装配置部署--超详细 一.什么是CI/CD 二.Gitlab内置持续集成 持续集成(CI) 持续交付(CD) 2.1 Gitlab的CI/CD优势 2.2 Gitlab的CI/CD ...

  8. STM32学习笔记(超详细)

    查看全文 http://www.taodudu.cc/news/show-6770803.html 相关文章: STM32单片机学习笔记(超详细整理143个问题,学习必看) vsb asc_vsb电力 ...

  9. Redis超详细学习

    Redis超详细学习 一.Redis入门 Redis是什么? Redis(Remote Dictionary Server ),即远程字典服务,是一个开源的使用ANSI C语言编写.支持网络.可基于内 ...

  10. Scala语言超详细介绍(上)

    Scala语言 1.为什么要学习scala? 2.scala的介绍 3.scala语言和Java语言对比 4.编译工具的安装 5.main方法讲解 6. scala中的数据数据类型 7. 懒加载 8. ...

最新文章

  1. Python解析照片EXIF信息,获取坐标位置
  2. day1-字符串拼接、表达式、break和continue
  3. 运维用python可以来做什么_学习Python一般可以用来干什么?
  4. Mysql数据库备份和按条件导出表数据
  5. eclipse打包项目为aar_新生日常牢骚之作业打包
  6. mysql sql 多选项_Mysql-Sqlalchemy-多表操作
  7. AEAI Miscdp文件上传功能使用心得
  8. caffe中网络结构参数详解
  9. weico.android批量转发,weico android|Weico新浪微博3.3.5 客户端_手机软件
  10. matlab 线性分析,线性系统稳定性分析的MATLAB分析方法.doc
  11. 手机卡顿怎么办?学会这三个方法清理内存,手机多用三年都不卡
  12. 机器人庄园作文_关于周庄一日游作文六年级汇总5篇
  13. 平均值、中位数、众数、极差分别是什么?各有什么有点和缺点?
  14. 【算法leetcode每日一练】1436. 旅行终点站
  15. ffmpeg所有的解码器(decoders)
  16. python跟excle公式区别_python – numpy.std和excel STDEV函数有什么区别吗?
  17. 笔记本的网络出现红叉,网络连接不上,网络不可用
  18. JavaWeb自我学习——进一步学习MyBatis
  19. Linux Deploy在安卓手机安装LINUX系统
  20. matlab扩展的欧几里得算法_最大公约数问题(欧几里得算法)

热门文章

  1. jsbridge android 参数,Android JsBridge 混合开发
  2. CUDA加速图像融合
  3. 临时工与劳务工有哪些区别呢
  4. Mysql数据库(七)触发器
  5. ServiceComb/CSE常见问题处理(1812)
  6. elementary OS 发布代号由 Isis 改为 Freya
  7. 类似Excel固定表头的效果
  8. 使用深度学习对你的颜值打分
  9. 我的2020,起飞的1年!
  10. 房主又要加租了,IT人如何在深圳立足