同余问题1(超详细!!!)
同余基本概念
剩余系
欧拉函数
欧拉函数φ(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))。 判定简系需要证明下面三点:
(ai∗b+bj∗a,a∗b)=1。
ai∗b+bj∗a≢ak∗b+bt∗a(mod a∗b)(i!=k或j!=t)
对于任意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. 电子计算机的发展历程①1946 年 2 月由宾夕法尼亚大学研制成功的 ENIAC 是世界上第一台电子数字计算机. "诞生了一 ...
- 大学计算机基础超详细知识点(高手总结),大学计算机基础超详细知识点(高手总结).doc...
大学计算机基础超详细知识点(高手总结).doc 第一章 计算机及信息技术概述 电子计算机的发展历程 ①1946年2月由宾夕法尼亚大学研制成功的ENIAC是世界上第一台电子数字计算机."诞生了 ...
- 呕心沥血 JavaScript知识点梳理大全,超详细 建议收藏!!!
呕心沥血 JavaScript知识点梳理大全,超详细 建议收藏!!! ✴️大家好,我是王同学,爆肝三天三夜王同学把JavaScript 知识点梳理了一遍,文章没有一点套路,只有满满的干货 ✴️如果对你 ...
- 学习javascript这一篇就够了超详细笔记(建议收藏)上
学习javascript这一篇就够了超详细笔记(建议收藏)上 1.初识 计算机基础导读 编程语言 计算机基础 初识js 浏览器执行 js组成 js初体验-三种书写位置 js注释 js输入输出语句 2. ...
- 软件测试流程(萌新专属)【超详细】-酸奶公园
软件测试流程(小白专属)[超详细]-酸奶公园 验证输入与输出的信息是否一致 输入框之前的标题是否正确 对Tab字符的处理机制 按下ctr |和alt键对输入框的影响 对于有约束条件要求的输入框应在条件 ...
- 电脑技巧全书(超详细.)
目录检索(相关文章在对应的目录下找~~)~~ 1.最全的windows操作系统快捷键-------------------------------------1楼 2.Windows 开始→运行→ ...
- Jenkins详细安装配置部署--超详细
Jenkins详细安装配置部署--超详细 一.什么是CI/CD 二.Gitlab内置持续集成 持续集成(CI) 持续交付(CD) 2.1 Gitlab的CI/CD优势 2.2 Gitlab的CI/CD ...
- STM32学习笔记(超详细)
查看全文 http://www.taodudu.cc/news/show-6770803.html 相关文章: STM32单片机学习笔记(超详细整理143个问题,学习必看) vsb asc_vsb电力 ...
- Redis超详细学习
Redis超详细学习 一.Redis入门 Redis是什么? Redis(Remote Dictionary Server ),即远程字典服务,是一个开源的使用ANSI C语言编写.支持网络.可基于内 ...
- Scala语言超详细介绍(上)
Scala语言 1.为什么要学习scala? 2.scala的介绍 3.scala语言和Java语言对比 4.编译工具的安装 5.main方法讲解 6. scala中的数据数据类型 7. 懒加载 8. ...
最新文章
- Python解析照片EXIF信息,获取坐标位置
- day1-字符串拼接、表达式、break和continue
- 运维用python可以来做什么_学习Python一般可以用来干什么?
- Mysql数据库备份和按条件导出表数据
- eclipse打包项目为aar_新生日常牢骚之作业打包
- mysql sql 多选项_Mysql-Sqlalchemy-多表操作
- AEAI Miscdp文件上传功能使用心得
- caffe中网络结构参数详解
- weico.android批量转发,weico android|Weico新浪微博3.3.5 客户端_手机软件
- matlab 线性分析,线性系统稳定性分析的MATLAB分析方法.doc
- 手机卡顿怎么办?学会这三个方法清理内存,手机多用三年都不卡
- 机器人庄园作文_关于周庄一日游作文六年级汇总5篇
- 平均值、中位数、众数、极差分别是什么?各有什么有点和缺点?
- 【算法leetcode每日一练】1436. 旅行终点站
- ffmpeg所有的解码器(decoders)
- python跟excle公式区别_python – numpy.std和excel STDEV函数有什么区别吗?
- 笔记本的网络出现红叉,网络连接不上,网络不可用
- JavaWeb自我学习——进一步学习MyBatis
- Linux Deploy在安卓手机安装LINUX系统
- matlab扩展的欧几里得算法_最大公约数问题(欧几里得算法)