题目背景

这是一道模板题

题目描述

给定n,p求1~n中所有整数在模p意义下的乘法逆元。

输入输出格式

输入格式:

一行n,p

输出格式:

n行,第i行表示i在模p意义下的逆元。

输入输出样例

输入样例#1: 复制

10 13
输出样例#1: 复制

1
7
9
10
8
11
2
5
3
4

说明

1 \leq n \leq 3 \times 10 ^ 6, n < p < 200005281≤n≤3×106,n<p<20000528

输入保证 pp 为质数。

思路:求逆元,用inv(a)表示一个数的逆元。

特别注意:本题卡输出cout

方法一:费马小定理。

  我们已知费马小定理为:a^(p-1)≡1(mod p)

两边同时除以a得到 :a^(p-2)≡1/a(mod p)也就是a^(p-2)≡inv(a) (mod p)

所以:inv(a)≡a^(p-2) (mod p)

然后就可以用快速幂求解。

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
int n,p;
long long pow(long long a,long long x,long long p){
long long s=%p;
for(;x;x>>=){
if(x&) s=s*a%p;
a=a*a%p;
}
return s;
}
int main(){
scanf("%d%d",&n,&p);
for(int i=;i<=n;i++)
cout<<pow(i,p-,p)<<endl;
}

费马小定理  时间复杂度n(log n)   TLE

方法二:拓展欧几里得。

  如果a*x+b*y=1在gcd(a,b)=1的情况下有解,那么这个解中的x就是a关于b的逆元,y就是b关于a的逆元。

  证明:a*x%b+b%y%b=1%b;

        a*x%b=1%b;

        a*x≡1(mod b);

所以x是a关于b的逆元,同理,可证明y是b关于a的逆元。

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
int n,p;
void ex_gcd(long long a,long long b,long long &x,long long &y,long long &d){
if(!b){ x=;y=;d=a; }
else{
ex_gcd(b,a%b,y,x,d);
y-=x*(a/b);
}
}
int inv(long long t,long long p){
long long d,x,y;
ex_gcd(t,p,x,y,d);
return d==?(x%p+p)%p:-;
}
int main(){
scanf("%d%d",&n,&p);
for(int i=;i<=n;i++)
printf("%d\n",inv(i,p));
}

拓展欧几里得 83

方法三:因为p是一个质数,所以一定有inv(a)=(p-p/a)*inv(p%a)%p;

  证明:设x=p%a,y=p/a;

  于是有:(x+y*a)%p=0;

  移项得:x%p=(-y)*a%p;

  x*inv(a)%p=(-y)%p;

  inv(a)=(p-y)*inv(x)%p;

  所以:inv(a)=(p-p/a)*inv(p%a)%p;

 然后一直递归到1为止。

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define MAXN 3000010
using namespace std;
int n,p;
int inv[MAXN];
int main(){
scanf("%d%d",&n,&p);
inv[]=;
printf("1\n");
for(int i=;i<=n;i++){
inv[i]=(p-p/i)*1ll*inv[p%i]%p;
printf("%d\n",inv[i]);
}
}

。。。

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

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

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

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

    P3811 [模板]乘法逆元 题意 求1-n所有整数在模p意义下的逆元. 分析 逆元 如果x满足\(ax=1(\%p)\)(其中a p是给定的数)那么称\(x\)是在\(%p\)意义下\(a\)的逆元 ...

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

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

  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. 洛谷 P1548 棋盘问题

    题目描述 设有一个N*M方格的棋盘(l<=N<=100,1<=M<=100)(30%) 求出该棋盘中包含有多少个正方形.多少个长方形(不包括正方形). 例如:当 N=2, M= ...

  2. 2019年今日头条机试_JAVA后台岗_第二题

    使用map的递推,java对象做key需要重写equeal,hashCode方法,使拥有相同属性值的对象被识别为同一对象. import java.util.*; class Cat{ public ...

  3. DROP TRIGGER - 删除一个触发器定义

    SYNOPSIS DROP TRIGGER name ON table [ CASCADE | RESTRICT ] DESCRIPTION 描述 DROP TRIGGER 将删除所有对一个现存触发器 ...

  4. swift学习——枚举

    swift枚举 1. 枚举基本语法 enum Method { case Add case Sub case Mul case Div } 也可以使用一种更简单的写法 enum Method1{ ca ...

  5. 安卓adb在拨号键盘上输入井号(#)

    安卓系统下由于#号是属于内定字符,需要转义为%23第一种方式:adb shell service call phone 1 s16 "%23"第二种方式:adb shell am ...

  6. 【转】关于编写WPF UserControl时提示The name 'InitializeComponent' does not exist in the current contextr的解决!

    1.打开.csproj(工程)文件. 2.找到<Import Project="$(MSBuildBinPath)/Microsoft.CSharp.targets" /&g ...

  7. hibernate5.x版本org.hibernate.MappingException: Unknown entity问题

    /* * //创建hibernate配置对象 Configuration cfg = new Configuration(); cfg.configure("hibernate.cfg.xm ...

  8. docker-compose nginx

    docker-compose nginx example source code docker-compose nginx balancing

  9. composer 设置代理

    在命令行终端中输入以下内容: export https_proxy='192.168.1.133:1080' export http_proxy='192.168.1.133:1080' 此前提是你已 ...

  10. python 04 学生信息管理系统

    今天任务不多,做了学生信息管理系统1.0,使用字典存储学生个体信息,列表存储学生字典.注意dict定义要在循环体内,若定义成全局变量或循环体外,则旧数据会被新数据覆盖.dict属于可变类型数据,内容改 ...