P3811 【模板】乘法逆元

题意

求1-n所有整数在模p意义下的逆元。

分析

逆元

如果x满足\(ax=1(\%p)\)(其中a p是给定的数)那么称\(x\)是在\(%p\)意义下\(a\)的逆元

A 拓展欧几里得算法

\[ax=1(\%p)
\]

转换一下也就是

\[ax+py=1
\]

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int extgcd(int a,int b,int&x,int&y){
if(b==0){
x=1;
y=0;
return a;
}
int g=extgcd(b,a%b,y,x);
y-=a/b*x;
return g;
}
int main(){
int a,b,x,y;
cin>>a>>b;
for(int i=1;i<=a;i++){
extgcd(i,b,x,y);
cout<<(x%b+b)%b<<endl;
}
}

得分:48。TLE

B 费马小定理

当p是质数时:

\[a^{p-1}≡1(\%p)
\]

将其变形一下即得

\[a*a^{p-2}≡1(\%p)
\]

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll qpow(ll a,ll b,ll p){
ll ans=1;
while(b){
if(b%2){
ans*=a;
ans%=p;
}
a*=a;
a%=p;
b>>=1;
}
return ans%p;
}
int main(){
int n,p;
cin>>n>>p;
for(int i=1;i<=n;i++){
cout<<(qpow(i,p-2,p)%p+p)%p<<endl;
}
}

得分:48。TLE

B' 欧拉定理

费马小定理只是欧拉定理的特殊情况。欧拉定理:

\[a^{\phi(p)}=1(\%p)
\]

也就是说\(a^{\phi(p)-1}\)是\(a\)在\(\%p\)意义下的逆元。

其中\(\phi\)是欧拉函数:小于n的正整数中与n互质的数的数目。

通式:\(\phi(n)=n\Pi_{i=1}^{n}\left(1-\frac{1}{p_i}\right)\)

递推性质:

  1. \(\phi(p)=p-1\) (p是质数)
  2. \(\phi(ab)=\phi(b)\phi(b)\) (a,b互质)
  3. \(\phi(ip)=p\phi(i)\) (i是p的倍数)

    所以可以用类似线性筛的方法求出欧拉函数表。
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll qpow(ll a,ll b,ll p){
ll ans=1;
while(b){
if(b%2){
ans*=a;
ans%=p;
}
a*=a;
a%=p;
b>>=1;
}
return ans%p;
}
ll n,p;
ll phi[20000529],prime[2000052],ps;
bool mark[2000052];
void calc(){
phi[1]=1;
for(int i=2;i<=p;i++){
if(!mark[i]){
prime[++ps]=i;
phi[i]=i-1;
}
for(int j=1;j<=ps;j++){
if(i*prime[j]>p)break;
mark[i*prime[j]]=1;
if(i%prime[j]==0){
phi[i*prime[j]]=phi[i]*prime[j];
break;
}else{
phi[i*prime[j]]=phi[i]*(prime[j]-1);
}
}
}
}
int main(){
cin>>n>>p;
calc();
for(int i=1;i<=n;i++){
cout<<(qpow(i,phi[p]-1,p)%p+p)%p<<endl;
}
}

得分:32。TLE

C 神奇的递推式(正解)

\[p=ka+r
\]

然后放到\(\%p\)意义下

\[ka+r=0(\%p)
\]

两边同时乘以\(a^{-1}r^{-1}\)

\[kr^{-1}+a^{-1}=0(\%p)
\]

所以

\[a^{-1}=-kr^{-1}=-\left[\frac{p}{a}\right]*(p\%a)^{-1}
\]

转换成代码就是

inv[a]=-(p/a)*inv[p%a];

正解代码

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int n,p;
int inv[3000000];
int main(){
scanf("%d%d",&n,&p);
inv[1]=1;
printf("1\n");
for(int i=2;i<=n;i++){
inv[i]=((-((ll)p/i)*inv[p%i])%p+p)%p;
printf("%d\n",inv[i]);
}
}

[洛谷P3811]【模板】乘法逆元的更多相关文章

  1. 洛谷P3373 [模板]线段树 2(区间增减.乘 区间求和)

    To 洛谷.3373 [模板]线段树2 题目描述 如题,已知一个数列,你需要进行下面两种操作: 1.将某区间每一个数加上x 2.将某区间每一个数乘上x 3.求出某区间每一个数的和 输入输出格式 输入格 ...

  2. 模板【洛谷P3811】 【模板】乘法逆元

    P3811 [模板]乘法逆元 给定n,p求1~n中所有整数在模p意义下的乘法逆元. T两个点的费马小定理求法: code: #include <iostream> #include < ...

  3. 洛谷 P3811 【模板】乘法逆元

    P3811 [模板]乘法逆元 题目背景 这是一道模板题 题目描述 给定n,p求1~n中所有整数在模p意义下的乘法逆元. 输入输出格式 输入格式: 一行n,p 输出格式: n行,第i行表示i在模p意义下 ...

  4. 洛谷——P3811 【模板】乘法逆元

    P3811 [模板]乘法逆元 线性求逆元 逆元定义:若$a*x\equiv1 (\bmod {b})$,且$a$与$b$互质,那么我们就能定义: $x$为$a$的逆元,记为$a^{-1}$,所以我们也 ...

  5. 洛谷—— P3811 【模板】乘法逆元

    https://www.luogu.org/problem/show?pid=3811 题目背景 这是一道模板题 题目描述 给定n,p求1~n中所有整数在模p意义下的乘法逆元. 输入输出格式 输入格式 ...

  6. 【洛谷P3811】[模板]乘法逆元

    乘法逆元 题目链接 求逆元的三种方式: 1.扩欧 i*x≡1 (mod p) 可以化为:x*i+y*p=1 exgcd求x即可 inline void exgcd(int a,int b,int &a ...

  7. 乘法逆元-洛谷-P3811

    题目背景 这是一道模板题 题目描述 给定n,p求1~n中所有整数在模p意义下的乘法逆元. 输入输出格式 输入格式: 一行n,p 输出格式: n行,第i行表示i在模p意义下的逆元. 输入输出样例 输入样 ...

  8. 洛谷.3803.[模板]多项式乘法(FFT)

    题目链接:洛谷.LOJ. FFT相关:快速傅里叶变换(FFT)详解.FFT总结.从多项式乘法到快速傅里叶变换. 5.4 又看了一遍,这个也不错. 2019.3.7 叕看了一遍,推荐这个. #inclu ...

  9. 洛谷.3803.[模板]多项式乘法(NTT)

    题目链接:洛谷.LOJ. 为什么和那些差那么多啊.. 在这里记一下原根 Definition 阶 若\(a,p\)互质,且\(p>1\),我们称使\(a^n\equiv 1\ (mod\ p)\ ...

随机推荐

  1. MongoDB的固定集合

    一.MongoDB固定集合概念 固定集合指的是事先创建,并且大小固定的集合.即假设一个集合设置了固定大小为100,再添加一条文档的时候,会把最前面的文档剔除,永远只保留100条数据. 固定集合特性:固 ...

  2. golang在线手册汇总

    1. golang官网 https://golang.org/ 2. golang中国 http://www.golangtc.com/ http://godoc.golangtc.com/pkg/ ...

  3. 在MFC下面实际演示CCriticalSection 的使用

    Q:CCriticalSection是什么? A:CCriticalSection是一种线程同步策略 或者说技术 或者方法  总之呢就是这么个意思.... 参考资料: http://blog.csdn ...

  4. Mysql中int和varchar类型

    int类型: int bigint smallint 和 tinyint 类型,如果创建新表时没有指定 int(M) 中的M时,默认分别是 : int           -------     in ...

  5. Dom与Bom,增删改查

    对Web标准的理解:web标准是由一系列标准组合而成的,页面有三个部分组成:结构,表现和行为.因而web标准即由结构化标准语言主要有 xml和xhtml,表现标准语言css,行为标准主要包括对象模型( ...

  6. XVII Open Cup named after E.V. Pankratiev Stage 14, Grand Prix of Tatarstan, Sunday, April 2, 2017 Problem A. Arithmetic Derivative

    题目:Problem A. Arithmetic DerivativeInput file: standard inputOutput file: standard inputTime limit: ...

  7. Scala List 用法

    1.++[B]   在A元素后面追加B元素 scala> val a = List(1) a: List[Int] = List(1) scala> val b = List(2) b: ...

  8. H5 动画:轨迹移动 | H5游戏 推金币

    https://aotu.io/notes/2017/11/06/path-animation/ https://aotu.io/notes/2017/11/06/coindozer/

  9. Ubuntu16.04 sever 安装

    插入U盘,开机有两个USB启动方式(传统模式和UEFI模式): 启动快速,我选择了UEFI模式,跳过BIOS初始化. 用启动盘成功引导之后,出现下面的界面 选择安装语言:中文(简体) 默认第一项:安装 ...

  10. iis原理介绍

    它是一个程序,负责对网站的内容进行管理,以及对客户的请求(就是Http请求)做出反应.当用户对一个页面提出请求时,IIS做如下反应(忽略权限):1.把对方请求的虚拟路径转换成物理路径2.根据物理路径搜 ...