乘法逆元的n种解法
时间:2019-10-08
本文章向大家介绍乘法逆元的n种解法,主要包括乘法逆元的n种解法使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
Rising_Date苣佬讲解
我们学着只争朝夕。
人生苦短,
道路漫长,
我们走向并珍爱每一处风光,
我们不停地走着,
不停地走着的我们也成了一处风光。
法一:线性递推
#include<bits/stdc++.h>
#define N 3000010
#define ll long long
#define rep(i,a,b) for(ll i=a;i<=b;++i)
using namespace std;
template <typename T> inline void rd(T &x){x=0;char c=getchar();int f=0;while(!isdigit(c)){f|=c=='-';c=getchar();}while(isdigit(c)){x=(x<<1)+(x<<3)-(c^48);c=getchar();}x=f?x:-x;}
ll inv[N],n,p;//不开long long 见祖宗
int main()
{
rd(n),rd(p) ;
inv[1]=1;
puts("1");
rep(i,2,n)
{
inv[i]=(ll)p-(p/i)*inv[p%i]%p;
// inv[i]=(ll)(p-(p/i))*inv[p%i]%p;这样写也可以
/*我们需要保证i^-1>0所以,我们在右边 +p而且for循环要从2开始,防止改变inv[1]的值;*/
printf("%lld\n",inv[i]);
}
return 0;
}
法*【阶乘求逆元】
讲解
#include <bits/stdc++.h>
using namespace std;
#define rep(i,a,b) for(int i=a;i<=b;++i)
#define dwn(i,a,b) for(int i=a;i>=b;--i)
template <typename T> inline void rd(T &x){x=0;char c=getchar();int f=0;while(!isdigit(c)){f|=c=='-';c=getchar();}while(isdigit(c)){x=(x<<1)+(x<<3)-(c^48);c=getchar();}x=f?x:-x;}
#define ll long long
ll n,p;
ll fac[3000006],ans[3000006];
ll ksm(ll x,ll power)
{
ll ans=1;
for(;power;power>>=1,(x*=x)%=p)
if(power&1)
(ans*=x)%=p;
return ans%p;
}
int main()
{
rd(n),rd(p);
fac[0]=1;
rep(i,1,n)fac[i]=(fac[i-1]*i)%p;
ll last=ksm(fac[n],p-2);
dwn(i,n,1)
{
ll k;
k=(last*i)%p;
ans[i]=(last*fac[i-1])%p;
last=k;
}
rep(i,1,n)
printf("%lld\n",ans[i]);
return 0;
}
法2:费马小定理【会t】
#include<bits/stdc++.h>
#define N 3000010
#define ll long long
#define rep(i,a,b) for(int i=a;i<=b;++i)
using namespace std;
template <typename T> inline void rd(T &x){x=0;char c=getchar();int f=0;while(!isdigit(c)){f|=c=='-';c=getchar();}while(isdigit(c)){x=(x<<1)+(x<<3)-(c^48);c=getchar();}x=f?x:-x;}
int n,p;
ll ksm(ll x,ll power)
{
ll ans=1;
for(;power;power>>=1,(x*=x)%=p)
if(power&1)
(ans*=x)%=p;
return ans%p;
}
int main()
{
rd(n),rd(p);
rep(i,1,n)
printf("%d\n",ksm(i,p-2));
return 0;
}
法3:解不定方程(exgcd)【会t】
#include<bits/stdc++.h>
using namespace std;
#define rep(i,a,b) for(int i=a;i<=b;++i)
#define dwn(i,a,b) for(int i=a;i>=b;--i)
template <typename T> inline void rd(T &x){x=0;char c=getchar();int f=0;while(!isdigit(c)){f|=c=='-';c=getchar();}while(isdigit(c)){x=(x<<1)+(x<<3)-(c^48);c=getchar();}x=f?x:-x;}
#define ll long long
ll x,y,n,p;
void exgcd(ll a,ll b,ll &x,ll &y)
{
if(!b)x=1,y=0;
else{exgcd(b,a%b,y,x);y-=a/b*x;}
}
int main()
{
rd(n),rd(p);
rep(i,1,n)
{
exgcd(i,p,x,y);
printf("%lld\n",(x%p+p)%p);
}
return 0;
}
原文地址:https://www.cnblogs.com/sjsjsj-minus-Si/p/11634717.html
- 将linux下的rm命令改造成mv到指定的目录下
- (36) 泛型 (中) - 解析通配符 / 计算机程序的思维逻辑
- Python优化第一步: 性能分析实践
- Python云计算框架:OpenStack源码分析之RabbitMQ(二)
- 编程获得CPU的主频
- Python多进程并行编程实践:以multiprocessing模块为例
- 由函数clock想到的
- (34) 随机 / 计算机程序的思维逻辑
- 创建和使用Windows静态链接库
- (37) 泛型 (下) - 细节和局限性 / 计算机程序的思维逻辑
- 快速失败Vs安全失败(Java迭代器附示例)
- Flask-SocketIO 文档译文
- 屏幕输出VS文件输出
- 判断一个数是不是2的幂
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- hadoop2.6.0-HA-QJM
- hadoop常用维护命令
- 自定义Chrome等浏览器搜索引擎
- hiveServer2服务端安装
- hive数据加载
- Python 技术篇-使用opencv读取图片实例演示,python安装opencv库
- 关于页更改并加入一些在线服务
- Hadoop-2.6.0为基础的Hive安装
- Python 技术篇-opencv读取中文路径图片报错及解决办法
- Javaweb鼠标事件案例分析—鼠标移入移出表格颜色变化
- docker registry V2私有仓库搭建
- Python 路径问题:cv2.error: OpenCV(4.1.0)...size.width>0 && size.height>0 in function 'cv::imshow'. 原因与解决
- 算法案例分析—字符串模式匹配算法
- Docker-软件工程集装箱技术
- PyQt5 技术篇-获取电脑屏幕桌面的宽、高和分辨率