洛谷题目链接

刚开始做乘法逆元还是有点懵逼的~

以下式子都在模\(p\)意义下进行

我们把式子改一下,变成:$$\sum\limits_{i=1}nki\times a_i^{-1}$$

我们先算出\(a_i\)的前缀积:$$s[i]=s[i-1]\times a_i$$

我们发现只要算出每一个前缀积的逆元\(t_i\),每一个\(a_i\)的逆元都好求了:$$a_i^{-1}=t_i\times s_{i-1}$$

那么怎么求每一个前缀积的逆元呢,我们可以先把$t_n运用费马小定理求出来: $$t_n=s_n^{p-2}$$

再根据:$$t_i=t_{i+1}*a_{i+1}$$

递推出所有的\(t\)

这样就把所有的逆元\(O(n)\)求出来了,我们再把原式变形:$$a_1{-1}k1+a_2{-1}k2+\cdots+a_{n-1}{-1}k{n-1}+a_n{-1}kn$$

\[k(a_1^{-1}+k(a_2^{-1}+\cdots+k(a_{n-1}^{-1}+a_n^{-1}k)))
\]

我们就可以\(O(n)\)求出答案啦~~~

接下来是美滋滋的代码时间~~~(必须用快读。。)

#include<iostream>
#include<cstdio>
#include<cmath>
#define int long long
#define N 5000007
using namespace std;
int n,p,k;
int s[N],a[N],inv_s[N];
int Read()
{
int fu=1,ret=0;
char c=getchar();
while(c<'0'||c>'9')
{
if(c=='-')
fu=-1;
c=getchar();
}
while(c>='0'&&c<='9')
{
ret=(ret<<3)+(ret<<1)+c-'0';
c=getchar();
}
return ret*fu;
}
int qpow(int a,int b)
{
int ans=1,res=a;
while(b)
{
if(b&1)
ans=(ans*res)%p;
res=(res*res)%p;
b/=2;
}
return ans%p;
}
signed main()
{
n=Read(),p=Read(),k=Read();
s[0]=1;
for(int i=1;i<=n;++i)
{
a[i]=Read();
s[i]=(s[i-1]*a[i])%p;
}
inv_s[n]=qpow(s[n],p-2);
for(int i=n-1;i>=1;--i)
inv_s[i]=(inv_s[i+1]*a[i+1])%p;
int ans=0;
for(int i=n;i>=1;--i)
ans=((inv_s[i]*s[i-1])%p+ans)*k%p;
printf("%lld\n",(ans+p)%p);
return 0;
}

P5431 【模板】乘法逆元2的更多相关文章

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

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

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

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

  3. P3811 【模板】乘法逆元

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

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

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

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

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

  6. luogu P3811 【模板】乘法逆元

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

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

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

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

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

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

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

随机推荐

  1. Hibernate持久化,生命周期

    一 .生命周期   1.1  . 说明 持久化类就是我们所说的实体类,实体类(持久化类)对象是有状态的. 为什么实体类对象会有状态? 答:由于HIbernate框架是一个先映射,后操作的框架.所谓的状 ...

  2. Vue响应式变化

    Vue有一个很方便的特性就是Vue的双向绑定,即响应式变化,在Vue2.X版本中,Vue响应式变化靠的是Object.defineProperty方法实现的,但是这个方法有个问题,就是对数组的支持不全 ...

  3. Pytorch:module 'torch' has no attribute 'bool'

    Pytorch:module 'torch' has no attribute 'bool' 这个应该是有些版本的Pytorch会遇到这个问题,我用0.4.0版本测试发现torch.bool是有的,但 ...

  4. 关于微信小程序iOS端时间格式兼容问题

    经过测试发现,当时间格式为 2018-08-08 08:00 ,需要将时间转为其他格式时,Android端转换成功,iOS端报错或是转为NaN 这是因为iOS端对符号‘ - ’不支持,也就是说iOS端 ...

  5. Android studio如何连接三星手机

    打开Android studio,选择Trouble Shoot device connections: 这个菜单项会自动扫描本地已经用USB线连接的设备: 已经成功扫描出了我的Galaxy C7 P ...

  6. input 框自动检测输入是否为数字

    最近做一个公众号,我这个菜鸡不得不学习很多东西,谁让老师要我一个人做这个项目呢? 好,进入正题,因为菜,所以很菜,但是百度很厉害啊,谁让我不好意思问老师,而且我也觉得问这么小的问题,太难以启齿.. 因 ...

  7. 【Zookeeper】本地ZK的搭建

    很久没有写了..最近看书的笔记都记在有道云上面..框架的使用觉得还是有必要写一下 1.下载 官网:https://www.apache.org/dyn/closer.cgi 清华镜像:https:// ...

  8. CSS之特性相关

    一.css的继承性与层叠性 继承性: 面向对象语言都会存在继承的概念,在面向对象语言中,继承的特点:继承了父类的属性和方法.那么我们现在主要研究css,css就是在设置属性的.不会牵扯到方法的层面. ...

  9. Flutter——TextField组件(文本框组件)

    TextField组件的常用属性: 属性 描述 maxLines 设置此参数可以把文本框改为多行文本框 onChanged 文本框改变的时候触发的事件 decoration hintText 类似 h ...

  10. C++——流类库和输入/输出

    前言 数据是怎么写道磁盘的? 代码里面我们一个读写调用似乎就能将数据从磁盘读写.仿佛代码是直接和磁盘打交道.以我们最常见的笔记本.或台式机的磁盘SATA盘为例,其受南桥上ATA控制器支配,这里面传输的 ...