题目链接:点击这里

题目大意:
给定 nnn 个正整数 aia_iai​ ,求它们在模 ppp 意义下的下式:
∑i=1nkiai\sum_{i=1}^n\frac{k^i}{a_i}i=1∑n​ai​ki​

题目分析:
本题主要问题是如何线性处理出 ai{a_i}ai​ 的逆元,我们令:
si=∏k=1iaks_i=\prod_{k=1}^ia_ksi​=k=1∏i​ak​
即 sis_isi​ 满足:
si=si−1ais_i=s_{i-1}a_isi​=si−1​ai​
取倒数有:
1si=1si−11ai\frac 1 {s_i}=\frac1{s_{i-1}}\frac1{a_i}si​1​=si−1​1​ai​1​
即:
1ai=si−11si\frac1{a_i}=s_{i-1}\frac 1{s_i}ai​1​=si−1​si​1​
有了此式我们就可以通过 si=si−1ais_i=s_{i-1}a_isi​=si−1​ai​ 递推出 sis_isi​ 然后用费马小定理求出 sis_isi​ 的逆再倒着推出其所有的逆

具体细节见代码:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<vector>
#include<set>
#include<map>
#include<stack>
#define ll long long
#define inf 0x3f3f3f3f
using namespace std;
ll read()
{ll res = 0,flag = 1;char ch = getchar();while(ch<'0' || ch>'9'){if(ch == '-') flag = -1;ch = getchar();}while(ch>='0' && ch<='9'){res = (res<<3)+(res<<1)+(ch^48);//res*10+ch-'0';ch = getchar();}return res*flag;
}
const int maxn = 5e6+5;
const int mod = 1e9+7;
const double pi = acos(-1);
const double eps = 1e-8;
const int base = 131;
ll n,p,k,a[maxn],s[maxn],invs[maxn];
ll qpow(ll a,ll b,ll mod)
{ll res = 1;while(b){if(b&1) res = res*a%mod;a = a*a%mod;b >>= 1;}return res;
}
int 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;}invs[n] = qpow(s[n],p-2,p);for(int i = n;i;i--){invs[i-1] = invs[i]*a[i]%p;}ll base = 1,ans = 0;for(int i = 1;i <= n;i++){base = base*k%p;ans = (ans+base*s[i-1]%p*invs[i]%p)%p;}printf("%lld\n",ans);return 0;
}

P5431 【模板】乘法逆元2相关推荐

  1. P5431 【模板】乘法逆元2(小学数学题,毒瘤鱼,卡常之王yyds)

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 P5431 [模板]乘法逆元2 题目传送门 题目大意: 给定 nnn 个正整数 aia_iai​ ,求 ...

  2. luogu P2613 【模板】有理数取余(费马小定理,乘法逆元)

    整理的算法模板合集: ACM模板 目录 题目传送门 题目传送门 相当于是一个高精的费马小定理求乘法逆元.虽然数据达到了101000110^{10001}1010001,但是我们可以使用快读然后一直模m ...

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

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

  4. 【luogu 3811】【模板】乘法逆元

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

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

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

  6. 【训练题22:线性求逆元】【模板】乘法逆元 | 洛谷 P3811

    [模板]乘法逆元 难度 普及/提高\color{yellow}普及/提高普及/提高 板子题,给出两种方法 题意 给 n,pn,pn,p 求出所有 i∈[1,n]i\in[1,n]i∈[1,n]在模 p ...

  7. gcd + 扩展欧几里得定理+递推乘法逆元(模板)

    gcd: int gcd(int a, int b){ return b==0? a: gcd(b, a%b); } 扩张欧几里得定理: 扩展欧几里德算法是用来在已知a, b求解一组x,y使得ax+b ...

  8. java乘法逆元与除法取模,逆元

    题目描述 题目描述 求关于x的同余方程ax≡1(mod b)的最小正整数解. 输入格式 每组输入数据只有一行,包含两个正整数a, b,用一个空格隔开. 数据规模: 对于40%的数据,2≤b≤1,000 ...

  9. 数论练习1 ( 曹冲养猪 + [POJ 2891]Strange Way to Express Integers + 乘法逆元【带证明】)

    虽然作业还没有做完,但是我还是放不下它,对此,我只想说: 今天你对作业爱理不理,明天它就让你补到飞起 DP先放放,我们要雨露均沾 练习上手:乘法逆元 题目 题解 代码实现 曹冲养猪?(互质的中国剩余定 ...

  10. 乘法逆元(洛谷-P3811)

    题目描述 给定n,p求1~n中所有整数在模p意义下的乘法逆元. 输入输出格式 输入格式: 一行n,p 1≤n≤3×10^6 ,n<p<20000528,输入保证 p 为质数. 输出格式: ...

最新文章

  1. 简略解释memset函数的用法
  2. Android基础总结(八)Service
  3. B树,B-树和B+树、B*树的区别
  4. SAP Spartacus 4.0 deprecation 之一 - i18next-xhr-backend
  5. java-多线程操作全(Thread)-Timer简单使用
  6. iis mysql5.7_手动配置网站环境 IIS 10+PHP 7.1+MySQL 5.7
  7. Nginx笔记-Nginx中进程结构及使用Linux信号量管理
  8. Grow heap (frag case) to 6.437MB for 1114126-byte allocation
  9. Vue中watch的使用
  10. Vue的单页应用中如何引用单独的样式文件
  11. VS 2010 for SharePoint
  12. linux 系统运维小工具
  13. MyBatis学习--查询缓存
  14. 安装matlab7.0步骤,Matlab 7.0 安装指导
  15. 怎样把pdf转换成word-多语言ocr支持
  16. vue.js基础 之 过滤器分类及使用
  17. 如何彻底对chrome降级
  18. 学习笔记---高等数学前置知识---约分、通分
  19. 如何成为一名云计算工程师
  20. mac如何查看IP地址,mac怎么查看IP地址

热门文章

  1. |2105|小泉的难题
  2. Ubuntu安装Lua
  3. vue设置右边距_那些PPT高手,都是怎样设置软件的
  4. 【shell】笔记|去重复行|删除匹配行|反选删除|反向显示|加减乘除
  5. @staticmethod的粗浅认识
  6. 服务器 进 pe系统安装系统安装系统,用U盘安装系统之PE安装.doc
  7. 工程训练大赛物流小车_宁大机械学子在工程训练省赛中斩获佳绩,取得历史性突破...
  8. 一次公司培训后的学习心得
  9. java 用遗传算法解决图像二值化问题 找阈值
  10. 程序设计与算法(一)第7周测验(2019夏季)