洛谷——P3811 【模板】乘法逆元
P3811 【模板】乘法逆元
线性求逆元
逆元定义:若$a*x\equiv1 (\bmod {b})$,且$a$与$b$互质,那么我们就能定义: $x$为$a$的逆元,记为$a^{-1}$,所以我们也可以称$x$为$a$的倒数,
所以对于$\frac{a}{b} (\bmod {p})$ ,我们就可以求出$b$在$\bmod {p}$下的逆元,然后乘上$a$,再$\bmod {p}$,就是这个乘法逆元的值了。
一、exgcd求逆元(O(l$og_n$))
这个就是利用拓欧求解线性同余方程$a*x \equiv c (\bmod {b})$
的c=1的情况。我们就可以转化为$a*x + b*y = 1$,求解这个方程的解。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm> #define ll long long
using namespace std; void exgcd(ll a,ll b,ll &x,ll &y){
if(!b){
x=,y=;
return;
}
exgcd(b,a%b,x,y);
ll tmp=x;
x=y;
y=tmp-a/b*y;
} int n,p; int main()
{
scanf("%d%d",&n,&p); for(int i=;i<=n;i++){
ll x,y;
exgcd(i,p,x,y);
x=(x%p+p)%p;
printf("%lld\n",x);
} return ;
}
Exgcd
二、快速幂+费马小定理
费马小定理:若$p$为素数,$a$为正整数,且$a,p$互质。 则有$a^{p-1} \equiv 1 (\bmod {p})$。
$a*x\equiv 1(\bmod {b})$
$a*x\equiv a^{p-1} (\bmod {b})$
$x \equiv a^{p-2} (\bmod {b})$
有点儿慢。。。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm> #define ll long long
using namespace std; int n,p; ll pow(int a,int b,int mod){
ll s=,t=a%mod;
for(;b;b>>=,t=1ll*t*t%mod)
if(b&) s=1ll*s*t%mod;
return s;
} int main()
{
scanf("%d%d",&n,&p); for(int i=;i<=n;i++){
printf("%lld\n",pow(i,p-,p));
} return ;
}
快速幂
三、线性递推求逆元
如何递推呢?
大佬说:推一下就好了嘛
蒟蒻(我):。。。=_=
首先$1^{-1}\equiv1(modp)$
设$p=k\times i+r$,$r < i$,$1< i < p$
那么$k\times i+r \equiv 0 (mod p)$
方程同乘$i^{-1},r^{-1}$得
$k\times r^{-1}+i^{-1} \equiv 0 (mod p)$
移项得:$i^{-1}\equiv -k\times r^{-1} (mod p)$
即$i^{-1}\equiv\lfloor{\frac{p}{i}}\rfloor \times (p mod i)^{-1} (mod p)$
也就是下面这一行代码:
inv[i]=(p-p/i)*inv[p%i]%p;
奉上代码:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm> #define ll long long
#define N 10101010
using namespace std; int n,p;
ll inv[N];
int main()
{
scanf("%d%d",&n,&p);
inv[]=;
printf("1\n");
for(int i=;i<=n;i++){
inv[i]=(p-p/i)*inv[p%i]%p;
printf("%lld\n",inv[i]);
}
return ;
}
洛谷——P3811 【模板】乘法逆元的更多相关文章
- 洛谷P3373 [模板]线段树 2(区间增减.乘 区间求和)
To 洛谷.3373 [模板]线段树2 题目描述 如题,已知一个数列,你需要进行下面两种操作: 1.将某区间每一个数加上x 2.将某区间每一个数乘上x 3.求出某区间每一个数的和 输入输出格式 输入格 ...
- [洛谷P3811]【模板】乘法逆元
P3811 [模板]乘法逆元 题意 求1-n所有整数在模p意义下的逆元. 分析 逆元 如果x满足\(ax=1(\%p)\)(其中a p是给定的数)那么称\(x\)是在\(%p\)意义下\(a\)的逆元 ...
- 模板【洛谷P3811】 【模板】乘法逆元
P3811 [模板]乘法逆元 给定n,p求1~n中所有整数在模p意义下的乘法逆元. T两个点的费马小定理求法: code: #include <iostream> #include < ...
- 洛谷 P3811 【模板】乘法逆元
P3811 [模板]乘法逆元 题目背景 这是一道模板题 题目描述 给定n,p求1~n中所有整数在模p意义下的乘法逆元. 输入输出格式 输入格式: 一行n,p 输出格式: n行,第i行表示i在模p意义下 ...
- 洛谷—— P3811 【模板】乘法逆元
https://www.luogu.org/problem/show?pid=3811 题目背景 这是一道模板题 题目描述 给定n,p求1~n中所有整数在模p意义下的乘法逆元. 输入输出格式 输入格式 ...
- 【洛谷P3811】[模板]乘法逆元
乘法逆元 题目链接 求逆元的三种方式: 1.扩欧 i*x≡1 (mod p) 可以化为:x*i+y*p=1 exgcd求x即可 inline void exgcd(int a,int b,int &a ...
- 乘法逆元-洛谷-P3811
题目背景 这是一道模板题 题目描述 给定n,p求1~n中所有整数在模p意义下的乘法逆元. 输入输出格式 输入格式: 一行n,p 输出格式: n行,第i行表示i在模p意义下的逆元. 输入输出样例 输入样 ...
- 洛谷.3803.[模板]多项式乘法(FFT)
题目链接:洛谷.LOJ. FFT相关:快速傅里叶变换(FFT)详解.FFT总结.从多项式乘法到快速傅里叶变换. 5.4 又看了一遍,这个也不错. 2019.3.7 叕看了一遍,推荐这个. #inclu ...
- 洛谷.3803.[模板]多项式乘法(NTT)
题目链接:洛谷.LOJ. 为什么和那些差那么多啊.. 在这里记一下原根 Definition 阶 若\(a,p\)互质,且\(p>1\),我们称使\(a^n\equiv 1\ (mod\ p)\ ...
随机推荐
- POJ 1060:Modular multiplication of polynomials
Modular multiplication of polynomials Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 4 ...
- flash、flex builder、flash builder、 air的关系
flash VS flex builder flash被adobe收购的时候是flash8,已经可以AS2面向对象了. 而被adobe收购后,adobe准备把flash打造成一个开发工具.就比如JBU ...
- 【SCOI 2007】 降雨量
[题目链接] 点击打开链接 [算法] 线段树 此题细节很多,写程序时要细心! [代码] #include<bits/stdc++.h> using namespace std; #defi ...
- POJ2653 Pick-up sticks 判断线段相交
POJ2653 判断线段相交的方法 先判断直线是否相交 再判断点是否在线段上 复杂度是常数的 题目保证最后答案小于1000 故从后往前尝试用后面的线段 "压"前面的线段 排除不可能 ...
- bzoj1016 [JSOI2008]最小生成树计数——Kruskal+矩阵树定理
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1016 从 Kruskal 算法的过程来考虑产生多种方案的原因,就是边权相同的边有一样的功能, ...
- 深入理解JMM(Java内存模型) --(五)锁
锁的释放-获取建立的happens before 关系 锁是Java并发编程中最重要的同步机制.锁除了让临界区互斥执行外,还可以让释放锁的线程向获取同一个锁的线程发送消息. 下面是锁释放-获取的示例代 ...
- RDA PQ工具使用 (屏参调整)
使用客户规格书,制作屏参文件. 注意:,必填区和计算区,必填区根据屏参的SPEC填写,具体的屏参文件参数通过点击“Calc Sync”生成. 如:HV320WHB-N81的SPEC: 打开“Color ...
- 14_传智播客iOS视频教程_OC的数据类型
对比一下OC和C差别,首先第一个是数据类型. C语言的数据类型分哪几类?C语言有哪些数据类型? 基本数据类型当然还包括int的一些修饰符.像short.long.long long.unsigned. ...
- FastDFS的介绍
FastDFS的介绍 FastDFS FastDFS是由国人余庆所开发,其项目地址: https://github.com/happyfish100 FastDFS是一个轻量级的开源分布式文件系统,主 ...
- Java源码——Integer
最近在研究java的源代码,但是由于自己英语水平有限,所以想使用中文注释的方式把源码里的方法全部重写 一遍,下面是楼主整理出来的一小部分.我把整体的项目托管到GitHub上了,欢迎大家前去交流学习. ...