luogu P3811线性求逆元
首先扩O:T了一个点(因为上界松),83分。
#include <cstdio>
using namespace std; int n, p; void exgcd(int a, int p, int &b, int &x){
if (p==){
b=, x=;
return;
}
exgcd(p, a%p, b, x);
int tmp=b;
b=x;
x=tmp-a/p*x;
return;
} int main(){
scanf("%d%d", &n, &p);
int x, y;
for (int i=; i<=n; ++i){
exgcd(i, p, x, y);
printf("%d\n", (x+p)%p);
}
return ;
}
然后费马,事实证明果然更慢,上界很紧。
#include <cstdio>
using namespace std; int n, p; int expower(int a, int pow, int mod){
int ans=;
while (pow){
if (pow&) ans=1LL*ans*a%mod;
a=1LL*a*a%mod;
pow>>=;
}
return ans;
} int main(){
scanf("%d%d", &n, &p);
for (int i=; i<=n; ++i){
printf("%d\n", expower(i, p-, p));
}
return ;
}
正解:首先$1^{-1} \equiv 1 \pmod p$
我们设:$p = k\cdot i + r,~r < i,~1 < i < p$
将其放在模p意义下:$k\cdot i + r \equiv 0 \pmod p$
两边同乘i-1,r-1就会得到:
$\begin{eqnarray*} k\cdot r^{-1} + i^{-1} &\equiv& 0 &\pmod p\\ i^{-1} &\equiv& -k\cdot r^{-1} &\pmod p\\ i^{-1} &\equiv& -\left\lfloor\frac{p}{i}\right\rfloor\cdot \left(p\bmod i\right)^{-1} &\pmod p\ \end{eqnarray*}$
于是核心代码就一行:
A[i] = -(p / i) * A[p % i];
我的代码:
注意:有可能是负数
#include <cstdio>
using namespace std; const int maxn=;
int n, p, a[maxn]; int main(){
scanf("%d%d", &n, &p);
a[]=;
printf("%d\n", a[]);
for (int i=; i<=n; ++i){
a[i]=(1LL*-(p/i)*a[p%i])%p;
a[i]=(a[i]+p)%p;
printf("%d\n", a[i]);
}
return ;
}
luogu P3811线性求逆元的更多相关文章
- 洛谷 P3811 【模板】乘法逆元(欧拉定理&&线性求逆元)
题目传送门 逆元定义 逆元和我们平时所说的倒数是有一定的区别的,我们平时所说的倒数是指:a*(1/a) = 1,那么逆元和倒数之间的区别就是:假设x是a的逆元,那么 a * x = 1(mod p), ...
- 【BZOJ 2186】 2186: [Sdoi2008]沙拉公主的困惑 (欧拉筛,线性求逆元)
2186: [Sdoi2008]沙拉公主的困惑 Description 大富翁国因为通货膨胀,以及假钞泛滥,政府决定推出一项新的政策:现有钞票编号范围为1到N的阶乘,但是,政府只发行编号与M!互质的钞 ...
- 【数学/扩展欧几里得/线性求逆元】[Sdoi2008]沙拉公主的困惑
Description 大富翁国因为通货膨胀,以及假钞泛滥,政府决定推出一项新的政策:现有钞票编号范围为1到N的阶乘,但是,政府只发行编号与M!互质的钞票.房地产第一大户沙拉公主决定预测一下大富翁国现 ...
- [uva11174]村民排队 递推+组合数+线性求逆元
n(n<=40000)个村民排成一列,每个人不能排在自己父亲的前面,有些人的父亲不一定在.问有多少种方案. 父子关系组成一个森林,加一个虚拟根rt,转化成一棵树. 假设f[i]表示以i为根的子树 ...
- 线性筛prime/phi/miu/求逆元模板
这绿题贼水...... 原理我不讲了,随便拿张草稿纸推一下就明白了. #include <cstdio> using namespace std; ; int su[N],ans,top; ...
- 【bzoj2839】【集合计数】容斥原理+线性求阶乘逆元小技巧
(上不了p站我要死了,侵权度娘背锅) Description 一个有N个元素的集合有2^N个不同子集(包含空集),现在要在这2^N个集合中取出若干集合(至少一个),使得 它们的交集的元素个数为K,求取 ...
- luogu P3811 【模板】乘法逆元
题目背景 这是一道模板题 题目描述 给定n,p求1~n中所有整数在模p意义下的乘法逆元. 输入输出格式 输入格式: 一行n,p 输出格式: n行,第i行表示i在模p意义下的逆元. 输入输出样例 输入样 ...
- 线性求所有数模p的乘法逆元
推理: 假如当前计算的是x在%p意义下的逆元,设$p=kx+y$,则 $\Large kx+y\equiv 0(mod\ p)$ 两边同时乘上$x^{-1}y^{-1}$(这里代表逆元) 则方程变为$ ...
- luogu P4238 多项式求逆 (模板题、FFT)
手动博客搬家: 本文发表于20181125 13:21:46, 原地址https://blog.csdn.net/suncongbo/article/details/84485718 题目链接: ht ...
随机推荐
- live555源码分析----RSTPServer创建过程分析
最近五一回家,终于有机会能安静的看一下流媒体这方面相关的知识,准备分析live555的源码,接下来会把我读源码的过程记录成博客,以供其他的同路人参考. 因为再读源码的过程中,并不是一路顺着读下来,往往 ...
- Thread之三:Thread Join()的用法
一.join用法 join()和wait()不会释放锁,join()是Thread的方法,wait()是Object的方法 1.join方法定义在Thread类中,则调用者必须是一个线程 例如: Th ...
- HDU 1863 畅通工程(Prim,Kruskal,邻接表模板)
畅通工程 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ...
- [python] itertools库学习
最近做 cyber-dojo上的题,好几道都要用到排列组合.一开始我还老老实实自己写算法.后来一想,不对呀!python有那么多的库,为啥不用呢? 于是搜了下,发现这个:itertools 使用 he ...
- SqlServer——用户自定义函数
在SQL Server中,用户不仅可以使用标准的内置函数,也可以使用自己定义的函数来实现一些特殊的功能.可以使用CREATE FUNCTION 语句创建.在创建时需要注意:函数名在数据库中必须唯一, ...
- gridcontrol 添加行号
private void gridView1_CustomDrawRowIndicator(object sender, DevExpress.XtraGrid.Views.Grid.RowIndic ...
- spring整合mybatis的事物管理配置
一.基本配置 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http:/ ...
- python的面向对象编程
面向对象编程是一种程序的范式,它把程序看成是对不同对象的相互调用,对现实世界建立的一种模型. 面向对象编程的基本思想,类和实例.类用于定义抽象对象,实例根据类的定义被创建出来. 在python当中我们 ...
- Linux下修改Mysql最大并发连接数
输入的命令如下: /usr/local/mysql/bin/mysqladmin -uroot -pyyyyyy variables |grep max_connections nano /etc/m ...
- day17-jdbc 6.Connection介绍
package cn.itcast.jdbc; import com.mysql.jdbc.Connection; import java.sql.DriverManager; import java ...