传送

乘法逆元:ax ≡ 1 (mod p),其中x为a的逆元,求模意义下的乘法逆元,通常有一下几种方法:

1.拓展欧几里得(也就是exgcd)

ax ≡ 1 (mod p)

ax-py=1

这就变成解不定方程的问题了,根据拓展欧几里得算法,代码如下(会TLE3个点)(就算开o2优化也没有卵用)

#include<iostream>
#include<cstdio>
using namespace std;
long long n,p;
void exgcd(long long a,long long b,long long &d,long long &x,long long&y)//其中d为a,b的最大公约数
{if(b==){x=;y=;d=a;//当然,exgcd 也可以写成water lift 大佬的有返回值的
}
else{
exgcd(b,a%b,d,y,x);
y-=a/b*x;
}
}
int main()
{
cin>>n>>p;
for(long long i=;i<=n;i++)
{ long long x,y,d;
exgcd(i,p,d,x,y);
cout<<((x/d)%(p/d)+(p/d))%(p/d)<<endl;//防止x为负数
}
}

2.费马小定理(因为数据保证p为质数)

所以即为a的逆元。

n个月过后来补个锅(这玩意用快速幂做)

代码:

#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
int a,p;
int ksm(int a,int b,int p)
{int r=;
while(b)
{if(b&)r=r*a%p;
a=a*a%p;
b/=;
}
return r;
}
int main()
{
scanf("%d%d",&a,&p);
cout<<ksm(a,p-,p);
}

不过依旧会TLE

3.说了这么多,终于说到不TLE的解法了

那就是线性递推

这样,就得到了a在模p意义下的逆元

递推式 

为了让结果不是负数,递推式就变为 

代码如下

#include<iostream>
#include<cstdio>
using namespace std;
long long n,p,f[];
int main()
{
scanf("%lld %lld",&n,&p);//要用scanf和printf,不然会超时
f[]=;f[]=;
printf("%lld \n",f[]);
for(long long i=;i<=n;i++)
{ f[i]=(long long)((p-p/i)*f[p%i])%p;
printf("%lld \n",f[i]);
} }

P3811 乘法逆元的更多相关文章

  1. 洛谷P3811乘法逆元

    传送门 线性递推 #include <iostream> #include <cstdio> #include <cstring> #include <alg ...

  2. P3811 【模板】乘法逆元

    P3811 [模板]乘法逆元 线性递推逆元模板 #include<iostream> #include<cstdio> #include<cstring> #def ...

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

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

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

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

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

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

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

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

  7. 题解 P3811 【【模板】乘法逆元】

    P3811 [模板]乘法逆元 一个刚学数论的萌新,总结了一下这题的大部分做法 //一.费马小定理+快速幂 O(nlogn) 64分 #include<cstdio> using names ...

  8. 逆元-P3811 【模板】乘法逆元-洛谷luogu

    https://www.cnblogs.com/zjp-shadow/p/7773566.html -------------------------------------------------- ...

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

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

随机推荐

  1. Estimating Linguistic Complexity for Science Texts--paper

    http://aclweb.org/anthology/W18-0505 https://sites.google.com/site/nadeemf0755/research/linguistic-c ...

  2. Automatic Text Difficulty Classifier Assisting the Selection Of Adequate Reading Materials For European Portuguese Teaching --paper

    the system uses existing Natural Language Processing (NLP) tools, a parser and an hyphenator, and tw ...

  3. css3的calc()

    计算大小宽度距离的一个计算函数    使用方法  再括号中进行加减乘除的运算   例如: width : calc(100% - 75px) 注意  :符号左右两边要有空格

  4. CentOS安装备忘2

    CentOS7安装备忘2 安装过程中不联网,安装完成也不要立刻联网,先关闭远程的服务后再联网更新.安装默认使用English,目的是生成的Home下所有文件夹都是英文的,方便使用. ========= ...

  5. python argv传递参数

    test.pyimport sysprint(sys.argv) python test.py arg1 arg2 arg3 打印["test.py","arg1&quo ...

  6. 【spring源码分析】spring和@PostConstruct注解

    @PostConstruct注解好多人以为是Spring提供的.其实是Java自己的注解. Java中该注解的说明:@PostConstruct该注解被用来修饰一个非静态的void()方法.被@Pos ...

  7. golang xml parent node add attribute without struct

    question: golang  encoding/xml: foo>bar,attr - foo ignored solution: you can replace output resul ...

  8. jQuery -> 基于当前元素的遍历

    版权声明:本文为博主原创文章,转载请注明出处 https://blog.csdn.net/FeeLang/article/details/26257549 假设我们已经通过jQuery方法选中了一组元 ...

  9. 普林斯顿数学指南(第二卷) (Timothy Gowers 著)

    第IV部分 数学的各个分支 IV.1 代数数 IV.2 解析数论 IV.3 计算数论 IV.4 代数几何 IV.5 算术几何 IV.6 代数拓扑 IV.7 微分拓扑 IV.8 模空间 IV.9 表示理 ...

  10. yum 安装 Mysql 5.7,忘记密码解决方案

    Linux卸载yum安装的mysql 一.系统情况 Linux:Centos7.4(64位) Mysql:5.6 二.卸载mysql 1.查看安装了哪些mysql程序 Bash rpm -qa | g ...