首页 > 其他分享 >乘法逆元总结

乘法逆元总结

时间:2023-04-16 19:35:01浏览次数:32  
标签:总结 return int res ll long 逆元 乘法

一、逆元定义

二、求逆元的方法

1.扩展欧几里得(exgcd) 适用于单个查找或者模p很大的情况下 , p 不是质数的时候也可以使用

此处是线性同余方程(a*x≡b(modm))的特殊情况 (b=1)

所求解x=x*b/d%m,若要保证x是最小的正整数则x=(x%m+m)%m

 1 #include<iostream>
 2 using namespace std;
 3 //扩展欧几里得算法
 4 // 对任意一组 ax+by=m 存在一组x,y满足ax+by=gcd(a,b) 即m=gcd(a,b)
 5 int exgcd(int a, int b, int& x, int& y) {
 6     if (!b) {
 7         x = 1, y = 0;
 8         return a;
 9     }
10     int t = exgcd(b, a % b, y, x);
11     y = y - a / b * x;
12     return t;
13 }    
14 int main() {
15     int x, y;
16     int a, m;
17     cin >> a >> m;
18  
19     int d = exgcd(a, m, x, y);
20  
21      x = x / d % m;
22     x = (x % m + m) % m;
23     printf("%d", x);
24  
25     return 0;
26 }

2.快速幂 O(logk)

费马小定理:

 

将该公式进行变形则可得到

所以我们可以用快速幂来算出的值,这个数就是a的逆元

 1 #include<iostream>
 2 using namespace std;
 3 typedef long long ll;
 4 ll qmi(ll a, ll b,ll p) {
 5     ll res = 1;
 6  
 7     while (b) {
 8         if (b & 1) res = res * a % p;
 9         a = a * a % p;
10         b >>= 1;
11     }
12     return res;
13 }
14 int main() {
15     int a, b, p;
16     cin >> a >> b>>p;
17     ll x = qmi(a, b - 2,p); 
18  
19     return 0;
20 }

3.线性求逆元 (用于求一连串数字对于一个模p下的逆元) O(n)

 1 #include<iostream>
 2 using namespace std;
 3 typedef long long LL;
 4 const int N = 3e6 + 10;
 5 int inv[N];
 6 int n, p;
 7 int main() {
 8     scanf("%d%d", &n, &p);
 9  
10     inv[1] = 1;
11  
12     for (int i = 2; i <= n; i++)
13         inv[i] = (LL)(p - p / i) * inv[p % i] % p;
14  
15  
16     return 0;
17 }

4.阶乘逆元 O(n) 只适用于模数为质数的情况

因此我们可以先求出n!然后进行递推来求出1->n!所有的逆元

递推式为:

 

 

 最后可以得到

 1 #include<iostream>
 2 using namespace std;
 3 typedef long long ll;
 4 const int N = 3e6 + 10;
 5 ll a[N], b[N];
 6 ll n, p;
 7 ll qmi(ll a, ll b, ll p) {
 8     ll res = 1;
 9     while (b){
10         if (b & 1) res = res * a % p;
11         a = a * a % p;
12         b >>= 1;
13     }
14     return res;
15 }
16 int main() {
17     cin >>n >> p;
18  
19     a[0] = 1;
20     for (int i = 1; i <= n; i++)
21         a[i] = (a[i - 1] * i) % p;
22  
23         b[n] = qmi(a[n], p - 2, p);
24  
25  
26     for (int i = n - 1; i >= 1; i--) 
27         b[i] = (b[i + 1] * (i + 1)) % p;
28  
29     for (int i = 1; i <= n; i++)
30         cout << b[i] * a[i - 1]%p<<endl;
31  
32  
33  
34     return 0;
35 }

 

标签:总结,return,int,res,ll,long,逆元,乘法
From: https://www.cnblogs.com/carrotbinbin1F/p/17323865.html

相关文章

  • MySQL的日志学习总结
    1、Mysql的安装这里使用tar包的方式 https://www.cnblogs.com/hanshuixin/articles/16887899.html初始的默认密码:tail-200falert.loglocalhost@root:后面的内容,就是本机root用户的初始密码,需要记录下来*<!ckp29Ne=& 2、错误日志错误日志是MySQL......
  • 关于Spring依赖注入一些理解和总结
    平常的java开发中,程序员在某个类中需要依赖其它类的方法,则通常是new一个依赖类再调用类实例的方法,这种开发存在的问题是new的类实例不好统一管理,spring提出了依赖注入的思想,即依赖类不由程序员实例化,而是通过spring容器帮我们new指定实例并且将实例注入到需要该对象的类中。依......
  • VBA语法总结
    为了控制Excel,学了些VBA,总结下语法,下文分为五部分:一、代码组织二、常用数据类型三、运算符四、控制流五、常用内置函数一、代码组织1.能写代码的地方有{模块,类模块}。2.代码中可以写的成员有{变量和常量,过程和函数}。对成员的访问修饰符有{public,private}3.写注释的方......
  • 4月14日多态的笔迹总结,
    1.声明的虚函数若等于零则叫纯虚函数。他不能被不重写继承,且可以代表一些实例化对象抽象的概念。2.对于虚函数接口继承的理解:普通函数是继承函数所有的东西,派生类就是为了调用这个函数而继承,而虚继承则是继承了这个函数的接口,函数的实现部分需要派生类去重写,从而达成多态。3.虚......
  • 每日总结
    今天对JavaScript和html前台页面进行了进一步学习。  ......
  • Default Arguments总结
    默认实参默认实参在C++编程实践中非常常见,但其中也有一些有趣的知识点与扩展,本文对默认实参做简单总结;函数默认实参默认实参用来取代函数调用中缺失的尾部实参:voidProcess(intx=3,inty=4){}拥有默认实参的形参之后的形参必须在同一作用域内有声明提供了默认参数,否则编译......
  • scrum项目冲刺_Day4会议总结
    今日团队任务:图片转excel(5天)前端开发(需团队风格统一)调用接口(后端),json数据->excel前后端连接           任烁玚(进行中)            图片转html(8天)前端开发(需团队风格统一)图片转为pdf(存储)pdf转html(调用接口)[html存储到数据库]前后台数据同......
  • 总结与归纳之字符串
    (大的不能在大的坑)前言总论+前置芝士正文字符串哈希KMP算法传统KMP算法Z函数fail树KMP自动机Trie与AC自动机普通Trie01Trie可持久化TrieAC自动机SA相关SA传统SAM广义SAM后缀平衡树ManacherPAM序列自动机最小表示法玄学:Lyndon分解总结......
  • QML 信号与响应方法的总结
    以下内容为本人的著作,如需要转载,请声明原文链接微信公众号「englyf」https://mp.weixin.qq.com/s/8orMKb803oz_G0sSOnDjDw如果面试过程中,面试官想了解你对Qt的理解有多少,少不了会涉及到信号槽这一块,毕竟这是Qt最经典的一项技术。刚开笔,我可能有点狂妄了。信号槽,分为两部分......
  • 总结与归纳之数学
    (巨坑好吧)前言前置的知识正文同余问题大杂烩玄学:Miller-Rabin&Pollard-rho线性代数大杂烩组合数学大杂烩筛法反演问题大杂烩玄学:群论问题大杂烩多项式与生成函数大杂烩玄学:线性规划博弈论问题大杂烩微积分问题小杂烩?计算几何问题大杂烩......