洛谷——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)\ ... 
随机推荐
- HTTP要点概述:十,内容协商
			一,内容协商(Content Negotiation) 同一个Web网站可能存在很多份相同内容的页面,比如英文版和中文版的Web页面,它们内容上相同,但是使用语言不同.比如大家进入英文版的google ... 
- Java 泛型 一
			泛型在Java中有很重要的地位,网上很多文章罗列各种理论,不便于理解,本篇将立足于代码介绍.总结了关于泛型的知识. 先看下面的代码: List list = new ArrayList(); list ... 
- JSP-Runoob:JSP 教程
			ylbtech-JSP-Runoob:JSP 教程 1.返回顶部 1. JSP 教程 JSP 与 PHP.ASP.ASP.NET 等语言类似,运行在服务端的语言. JSP(全称Java Server ... 
- request.getRemoteAddr()和request.getRemoteHost()
			转自:https://www.cnblogs.com/aizj/p/7593209.html request.getRemoteAddr()是获得客户端的ip地址.request.getRemoteH ... 
- LD_LIBRARY_PATH设置问题
			今天突然遇到设置LD_LIBRARY_PATH的问题,,发现在.bashrc和/etc/profile中添加 exportLD_LIBRARY_PATH = path_name:$LD_LIBRARY ... 
- spring-boot-configuration-processor的作用
			spring默认使用yml中的配置,但有时候要用传统的xml或properties配置,就需要使用spring-boot-configuration-processor了 先引入pom依赖 <d ... 
- kernel信息及其相关命令
			内核 linux内核是单内核体系设计.但充分借鉴了微内核设计体系的优点,为内核引入模块化机制 内核组成部分: kernel: 内核核心,一般为bzImage,通常在/boot 目录下,名称为vmlin ... 
- Linux查找和替换目录下所有文件中字符串(转载)
			转自:http://rubyer.me/blog/1613/ 单个文件中查找替换很简单,就不说了.文件夹下所有文件中字符串的查找替换就要记忆了,最近部署几十台linux服务器,记录下总结. 查找文件夹 ... 
- bzoj [JSOI2010]Group 部落划分 Group【二分+并查集】
			我是zz吗这么简单都写错-- 一眼二分,然后判断的话是枚举点,然后计算这个点到已有联通块的最小距离,如果这个点到一些联通块的距离小于当前二分的val,则把这些联通块合并起来,这里用并查集维护,最后看这 ... 
- React实战之60s倒计时按钮(发送短信验证按钮)
			React实战之60s倒计时按钮——短信验证按钮 导入:(antd组件——Form表单) import { Button, Form, Input } from 'antd'; const FormI ... 
