一、同余:
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. 零基础学C++进腾讯,这份GitHub热榜的「从入门到高薪」请你收下
  2. 如何有效落地企业目标管理方法论?
  3. 学术界盛事揭幕:一图解读跨越百余年的诺贝尔奖
  4. Android 懒加载
  5. eclipse启动tomcat报错
  6. 捞人宝估值数亿,已捞出数位大佬,商业模式已验证!
  7. JVM年轻代参数:-Xmn、-XX:NewSize、-XX:MaxNewSize
  8. Java 正则表达式格式化时间显示
  9. python编写统计选票的程序_使用python编写微信公众号发稿统计程序
  10. hello world_建立无服务器的“ Hello World”功能
  11. html解析のBeautifulSoup
  12. 云+X案例展 | 民生类:京东云突破数据中心光互联瓶颈
  13. C语言中全局变量、局部变量、静态全局变量、静态局部变量的区别 (转)
  14. 如何系统地学习深度学习(从初级到高级,初学者必看)
  15. mysql 的 show profile 相关属性
  16. 传智播客-刘意-java深入浅出精华版学习笔记Day10
  17. Diablo III 卡Checking for updates的问题解决
  18. openwrt - transmission
  19. 图形处理单元(GPU)的演进
  20. android 代码中切换输入法,在Android系统中切换输入法的相关教程

热门文章

  1. 探索“迅游加速器(LSP)”DLL的大致原理
  2. 单个进程监听多个端口及多个进程监听同一个端口
  3. Javashop B2C系统助力企业打造独立电商
  4. 2022-2028全球与中国药物痤疮贴市场现状及未来发展趋势
  5. Ubuntu 源介绍
  6. php 分批处理,PHP 遍历元素并分批处理
  7. 工业元宇宙:智能制造的未来形态
  8. ‘远程主机强迫关闭了一个现有的连接‘?说说这些年爬虫遇到的坑!
  9. Freemarker 比较大小
  10. 苹果手表资讯:新Apple Watch Series 7将如何变化?