推荐博客 : http://blog.csdn.net/baidu_35643793/article/details/75268911

通常我们在计算除法取模时,并不能直接的取模后再去相除,答案会有问题,在这里我们就引入逆元的,(a/b)%mod = (a*c)%mod , 在这里 c 是 b 的逆元。

即 a/b 的模等于 a*b 的逆元的模;

求逆元的方法 :

(1) 费马小定理

  在是素数的情况下,对任意整数都存在逆元。

  题目中给定的对 P 去模,且 P 是素数,则数X的逆元就是 X^(p-2) 。

 代码示例 :

const ll mod = 998244353;

ll qpow(ll x, ll cnt){

    ll ans = 1;
while(cnt > 0){
if (cnt&1) ans = (ans*x)%mod;
x = (x*x)%mod;
cnt >>= 1;
}
return ans;
}

注意  : 最后的答案一定要在取一次模才可以 !

(2)扩展欧几里得

同余方程 ax = b (mod n) , 当 b = 1 时, ax = 1 (mod n) , 此时称 x 为 a 对模 n 得乘法逆元, 那么就可以转换为 ax - ny = 1 ,逆元存在得条件时 gcd(a, n) = 1 。

代码示例:

void exgcd(ll a, ll b, ll &g, ll &x, ll &y){
if (b == 0) {g = a; x = 1; y = 0;}
else {
exgcd(b, a%b, g, y, x);
y -= (a/b)*x;
}
} ll inv(ll a, ll n){
ll d, x, y;
exgcd(a, n, d, x, y);
return d == 1?(x+n)%n:-1;
}

(3) 欧拉函数

当 p 是素数的时候,由费马小定理值 a^(p) = a (mod p) , 那么则有 a ^ (p-1) = 1 (mod p) , 在变形则由 a ^ (p-2) = a^(-1) (mod p)

当 p 不是素数得时候,这时候就需要借助欧拉函数,

a^(phi(p)) = 1 (mod p)

a*a^(phi(p)-1)≡1      (mod p)

a^(-1)≡a^(phi(p)-1)  (mod p)

逆元(inv)的更多相关文章

  1. 逆元(inv)

    当求解公式:(a/b)%m 时,因b可能会过大,会出现爆精度的情况,所以需变除法为乘法: 设c是b的逆元,则有b*c≡1(mod m): 则(a/b)%m = (a/b)*1%m = (a/b)*b* ...

  2. 逆元Inv(模板+应用)

    逆元: 如果满足公式,则有a 是 b的逆元同时b也是a的逆元. 逆元的应用: 设c为b在对m取余的意义下的逆元: 在求解公式 (a / b) % m的时候,如果b可能会非常的大,所以会出现爆精度的问题 ...

  3. gcd,lcm,ext_gcd,inv

    Least Common Multiple http://acm.hdu.edu.cn/showproblem.php?pid=1019 #include<cstdio> int gcd( ...

  4. hdu 5407 CRB and Candies(组合数+最小公倍数+素数表+逆元)2015 Multi-University Training Contest 10

    题意: 输入n,求c(n,0)到c(n,n)的所有组合数的最小公倍数. 输入: 首行输入整数t,表示共有t组测试样例. 每组测试样例包含一个正整数n(1<=n<=1e6). 输出: 输出结 ...

  5. A. On The Way to Lucky Plaza 概率 乘法逆元

    A. On The Way to Lucky Plaza time limit per test 1.0 s memory limit per test 256 MB input standard i ...

  6. Codeforces gym 101343 A. On The Way to Lucky Plaza【概率+逆元+精度问题】

     2017 JUST Programming Contest 2.0 题目链接:http://codeforces.com/gym/101343/problem/A A. On The Way to ...

  7. HDU 5698——瞬间移动——————【逆元求组合数】

    瞬间移动 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submis ...

  8. 【题解】POJ1845 Sumdiv(乘法逆元+约数和)

    POJ1845:http://poj.org/problem?id=1845 思路: AB可以表示成多个质数的幂相乘的形式:AB=(a1n1)*(a2n2)* ...*(amnm) 根据算数基本定理可 ...

  9. O(n)求素数,求欧拉函数,求莫比乌斯函数,求对mod的逆元,各种求

    筛素数 void shai() { no[1]=true;no[0]=true; for(int i=2;i<=r;i++) { if(!no[i]) p[++p[0]]=i; int j=1, ...

  10. hdu 5698(杨辉三角的性质+逆元)

    ---恢复内容开始--- 瞬间移动 Accepts: 1018 Submissions: 3620 Time Limit: 4000/2000 MS (Java/Others) Memory Limi ...

随机推荐

  1. [转载]Eclipse luna tomcat 控制台 中文乱码

    http://hahalzb.iteye.com/blog/709109 今天做S2SH集成的例子,所有该设置的地方都设置成了UTF-8,包括tomcat的配置文件server.xml.web.xml ...

  2. python模块之random模块

    random模块 随机模块,用于处理随机问题. import random # 随机整数 print(random.randint(0, 9)) # 0到9之间随机一个整数 print(random. ...

  3. tf.truncates_normal()

    转载自:https://blog.csdn.net/uestc_c2_403/article/details/72235565 tf.truncated_normal(shape, mean, std ...

  4. linux 使用 jiffies 计数器

    这个计数器和来读取它的实用函数位于 <linux/jiffies.h>, 尽管你会常常只是包含 <linux/sched.h>, 它会自动地将 jiffies.h 拉进来. 不 ...

  5. linux下mysql5.7忘记root密码修改

    朋友最近开始学服务器,mysql密码忘了又不会弄,让我帮忙解决一下.重置或修改mysql的root密码这种事平时很少做,还是得google辅助一下,于是弄完了写篇博客记录一下,方便若干月后又有人遇到这 ...

  6. 2018-9-30-C#-使用外部别名

    title author date CreateTime categories C# 使用外部别名 lindexi 2018-09-30 18:37:23 +0800 2018-07-02 14:31 ...

  7. dotnet 如何在 Mock 模拟 Func 判断调用次数

    在 dotnet 程序有很好用的 Mock 框架,可以用来模拟各种接口和抽象类,可以用来测试某个注入接口的被调用次数和被调用时传入参数.本文告诉大家如何在 Mock 里面模拟一个 Func 同时模拟返 ...

  8. 【2016常州一中夏令营Day7】

    序列(sequence)[题目描述]蛤布斯有一个序列,初始为空.它依次将 1-n 插入序列,其中 i插到当前第 ai 个数的右边 (ai=0 表示插到序列最左边).它希望你帮它求出最终序列.[输入数据 ...

  9. CP策略含有中文字符提交失败故障解决

    硬件平台:CP5600 系统版本:R80.10 补丁版本:TAKE103 故障现象:提交新增策略失败,日志显示 if the problem persists contact Checkpoint S ...

  10. 第二阶段:2.商业需求分析及BRD:6.商业需求文档2

    BRD的三个诉求:1.项目很重要,支持.2.有价值,获得重视,纳入战略规划中.3.需要资源,横向的协调资源.   方法:知道决策层是哪些组成,同时找到合适的决策层. BRD决策分类:1.找资本类(CF ...