P3811 乘法逆元
乘法逆元: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 乘法逆元的更多相关文章
- 洛谷P3811乘法逆元
传送门 线性递推 #include <iostream> #include <cstdio> #include <cstring> #include <alg ...
- P3811 【模板】乘法逆元
P3811 [模板]乘法逆元 线性递推逆元模板 #include<iostream> #include<cstdio> #include<cstring> #def ...
- [洛谷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 【模板】乘法逆元
P3811 [模板]乘法逆元 线性求逆元 逆元定义:若$a*x\equiv1 (\bmod {b})$,且$a$与$b$互质,那么我们就能定义: $x$为$a$的逆元,记为$a^{-1}$,所以我们也 ...
- 题解 P3811 【【模板】乘法逆元】
P3811 [模板]乘法逆元 一个刚学数论的萌新,总结了一下这题的大部分做法 //一.费马小定理+快速幂 O(nlogn) 64分 #include<cstdio> using names ...
- 逆元-P3811 【模板】乘法逆元-洛谷luogu
https://www.cnblogs.com/zjp-shadow/p/7773566.html -------------------------------------------------- ...
- 【洛谷P3811】[模板]乘法逆元
乘法逆元 题目链接 求逆元的三种方式: 1.扩欧 i*x≡1 (mod p) 可以化为:x*i+y*p=1 exgcd求x即可 inline void exgcd(int a,int b,int &a ...
随机推荐
- 质因子分解(Pollard_Rho法)
LL Pollard_Rho(LL n, LL c) { LL x, y, d; LL i = , k = ; x = y = rand() % n; do { i++; d = gcd(n + y ...
- Fedora初体验
========1. 下载https://getfedora.org/zh_CN/workstation/download/下载如下2个文件:Fedora-Workstation-Live-x86_6 ...
- Windows 10瘦身
Windows操作系统功能越来越强大,同时体型也越来越臃肿.安装盘没有60Gb都不敢安装.Windows10 安装最低磁盘要求20G ====瘦身基础篇,适合任何用户:(可见目录,简单迁移)1. 安装 ...
- 计算x
如果x的x次幂结果为10(参见[图1.png]),你能计算出x的近似值吗? 显然,这个值是介于2和3之间的一个数字. 请把x的值计算到小数后6位(四舍五入),并填写这个小数值. 注意:只填写一个小数, ...
- python django day 3 页面,自动 跳转,参数传递
zqxt_views/urls.pypath('', calc_views.index, name='home'), calc/views.pydef index(request): return r ...
- ELFhash
字符串哈希算法(以ELFHash详解) 更多字符串哈希算法请参考:http://blog.csdn.net/AlburtHoffman/article/details/19641123 先来了解一 ...
- go-elasticsearch 来自官方的 golang es client
elasticsearch 终于有了官方的golang sdk 了,地址 https://github.com/elastic/go-elasticsearch 当前还不稳定,同时主要是对于es7 的 ...
- 使用dynamic和MEF实现轻量级的AOP组件 ---- 系列文章
.NET 4 实践 - 使用dynamic 和MEF实现轻量级的AOP组件(1) .NET 4 实践 - 使用dynamic和MEF实现轻量级的AOP组件 (2) .NET 4 实践 - 使用 ...
- 如果指针为空,返回ERROR
if(!p) //是!p而不是p return ERROR;
- ipset可使iptables一次性封多个ip
ipset是什么? ipset是iptables的扩展,它允许你创建 匹配整个地址集合的规则.而不像普通的iptables链只能单IP匹配, ip集合存储在带索引的数据结构中,这种结构即时集合比较大也 ...