一、同余:
1。若整数a和整数b除以正整数m的余数相等,则称a,b模m同余,记作a≡b(mod m)。

2。费马小定理:若p是质数,则对于任意整数a,有ap ≡a(mod p)。

3。欧拉定理:若正整数a,n互质,则 aφ(n)≡1(mod n) ,其中φ(n)是欧拉函数。

4。若正整数a,n互质,则对于任意正整数b,有ab≡ab mod φ(n)(mod n)。

很多问题要求我们对一个质数p取模后输出。面对乘方算式,我们可以先把 底数对p取模(底数不是p的倍数)、指数对φ(p)取模,再计算乘方。

若a,n不一定互质且b>φ(n)时,有ab≡ab mod φ(n) + φ(n) (mod n)。
这意味着即使底数与模数不互质,我们也有办法把指数的规模缩小到容易计算的范围。

5。若正整数a,n互质,则满足ax≡1(mod n)的最小正整数x0是φ(n)的约数。

二、扩展欧几里得算法:
1。对于任意整数a,b,存在一对整数x,y,满足 ax+by=gcd(a,b)。
求解ax+by=gcd(a,b)的一组特解x0,y0,并返回gcd(a,b)。

int exgcd(int a,int b,int &x,int &y)
{if(b==0){x=1;y=0;return a;}int d=exgcd(b,a%b,x,y);int z=x;x=y;y=z-y*(a/b);return d;
}int d=exgcd(a,b,x0,y0);

2。对于一般的方程ax+by=c,它有解当且仅当gcd(a,b)|c。
令d=gcd(a,b)。
其通解可以表示为:

x=c/d*x0+k*b/d;
y=c/d*y0-k*a/d;
k取遍整数集合。

x的最小非负整数解:

x=(x%(b/d)+(b/d))%(b/d);

y的最小非负整数解:

y=(y%(a/d)+(a/d))%(a/d);

三、乘法逆元:
遇到(a/b)%p
或者(a/b)%m
1。当模数p为质数时,bp-2即为b的模p乘法逆元。
2。只保证b,m互质时,可以通过求解同余方程b*x≡1(mod m)求得其逆元。

int inverse(int b,int m)
{int x,y;int d=exgcd(b,m,x,y);return (x%m+m)%m;
}

3。若b,m不互质时,b模m的逆元从概念上来说是不存在的,但是(a/b)%m仍然是有值的。
( a / b ) % m = ( a % ( b ∗ m ) ) / b (a/b)\%m=(a\%(b*m))/b (a/b)%m=(a%(b∗m))/b

注意:a和m的乘积可能会太大而溢出。

4。若p是个质数:
i n v ( a ) = ( p − p / a ) i n v ( p % a ) % p 。 inv(a)=(p-p/a)inv(p\%a)\%p。 inv(a)=(p−p/a)inv(p%a)%p。
求t关于mod的逆元:
t<mod

LL inv(LL i)
{if(i==1)return 1;return (mod-mod/i)*inv(mod%i)%mod;
}

线性时间复杂度求n个数关于mod的逆元:

LL inv[maxn];
void getInv(LL n)
{inv[1]=1;for(int i=2;i<n;i++)inv[i]=(mod-mod/i)*inv[mod%i]%mod;
}

5。阶乘逆元

void init(int n)
{fac[0]=1;for(int i=1;i<=n;i++)fac[i]=fac[i-1]*i%mod;inv[n]=inverse(fac[n],mod);for(int i=n-1;i>=0;i--)inv[i]=inv[i+1]*(i+1)%mod;
}

四、线性同余方程:
标准形式:ax≡b(mod m)
转化为:ax + my = b
线性同余方程有解当且仅当 g c d ( a , m ) ∣ b gcd(a,m)|b gcd(a,m)∣b。
用扩展欧几里得求解即可求得x的通解及最小非负整数解。

欧几里得、扩展欧几里得、同余相关推荐

  1. 数论一之定理证明——裴蜀/威尔逊/费马/扩展欧几里得/[扩展]欧拉/[扩展]中国剩余定理,欧拉函数,逆元,剩余系,筛法

    打死没想到会在H老师处学懂数论 同余,整除 模运算 埃式筛法 欧拉筛法 最大公约数和最小公倍数 辗转相除法 更相减损术 裴蜀定理 威尔逊定理 费马定理 同余等价类.剩余系.缩系 欧拉函数 欧拉定理 扩 ...

  2. 欧几里得 扩展欧几里得

    欧几里得  &  扩展欧几里得 时间复杂度T(n):O(log2n); 空间复杂度S(n):O(n); Advantages: 1.    时间复杂度不高,和普通欧几里得一样: 2.    代 ...

  3. 【欧几里得扩展欧几里得】

    欧几里得 LL gcd(LL a,LL b){return (b==0) ? a : gcd(b,a%b);} 扩展欧几里得 int ex_gcd(int a,int b,int &x,int ...

  4. 欧几里得+扩展欧几里得+RSA

    欧几里得算法: 就是辗转相除法,gcd(a,b)=gcd(b,a%b), 实现简单,用途广泛,模板如下: int gcd(int a,int b)//或者都取 long long {return b! ...

  5. 欧拉降幂及其扩展欧拉降幂

    欧拉降幂: 从公式来看,需要使用快速幂运算和欧拉函数 #include<bits/stdc++.h>using namespace std; typedef __int64 LL;cons ...

  6. 欧几里得扩展欧几里得

    原博网址:http://www.cnblogs.com/frog112111/archive/2012/08/19/2646012.html 欧几里德算法 欧几里德算法又称辗转相除法,用于计算两个整数 ...

  7. 【笔记】 欧几里得(扩展欧几里得)

    欧几里得 本质:利用辗转相减法求最大公约数,即 gcd(a, b). 数学表达: 设 a > b ,则                          gcd(a, b) = gcd(a-b, ...

  8. 欧拉定理相关及扩展欧几里得

    威尔逊定理.费马定理.欧拉函数.欧拉定理.逆元.exgcd 威尔逊定理: ( p − 1 ) ! ≡ − 1 ( m o d p ) (p-1)! \equiv -1 \pmod p (p−1)!≡− ...

  9. 扩展欧几里得 POJ 1061

    感觉这道题目的数据好水啊...我的代码我都觉得姿势特别奇怪...竟然还过了... 好吧,原来不是姿势奇怪,而是逆元需要用的时候是余数也需要的时候,这里的余数是不需要的,所以就AC了 就说一下碰到的问题 ...

  10. Java实现算法导论中求解模线性方程解(基于最大公约数欧几里得扩展算法)

    基于最大公约数欧几里得扩展算法求解算法导论中模线性方程解.具体要结合算法导论中的有关数论算法章节理解,具体代码如下: package cn.ansj;/*假设方程ax=b(mod n)有解,且x0是方 ...

最新文章

  1. MPEG原理分析及MPEG音频编码器的调试
  2. HDU 5308 I Wanna Become A 24-Point Master
  3. Kubernetes 凭什么成了云原生应用底座?
  4. 利用爬虫模拟网页微信wechat
  5. js获取浏览器滚动条距离顶端的距离
  6. JavaScript单线程运行机制与并发模型
  7. 你写过哪些原创的风骨傲气,热血沸腾的句子?
  8. H3C ipv6与ipv4(6to4)隧道实验
  9. 一文看懂BGP路由黑洞问题
  10. GitHub网站的主题设置
  11. 华硕B85主板刷nvme协议全过程
  12. 8、go语言:测试与性能调优
  13. web开发学习过程,一个合格的初级前端工程师需要掌握的模块笔记
  14. 在pycharm中解决同一目录下py文件不能import的问题
  15. 基于Python的指数基金量化投资——指数基金偏离度计算
  16. PHP Framework 数据库框架 Medoo 2.1:使用 Medoo 连接MYSQL数据库
  17. 《机器学习》赵卫东学习笔记 第13章推荐系统(课后习题及答案)
  18. 如何查看计算机系统管理日志,怎么查看电脑系统日志
  19. Linux上天之路(一)之Linux前世今生
  20. 想从事大数据行业,报什么专业比较好

热门文章

  1. IPV4 地址不够如何解决
  2. Linux中显示文档第三行内容,Linux下工作常使用的命令(持续整理)
  3. oracle impdp参数,expdp/impdp 详细参数解释
  4. 从零开始学习SFR-- 1.1(转:分辨率单位))
  5. java web 导入数据库_关于JAVA、 JAVA Web项目导入数据库驱动包的问题
  6. php declare 的语法详解
  7. UE4 Pawn的平行移动
  8. 统一架构——优酷主客的标准化开发之路
  9. 1688平台API接口接入文档和参数说明调用示例
  10. 大学数学小屋闲题002-洛必达法则证明