P5431 【模板】乘法逆元2
题目链接:点击这里
题目大意:
给定 nnn 个正整数 aia_iai ,求它们在模 ppp 意义下的下式:
∑i=1nkiai\sum_{i=1}^n\frac{k^i}{a_i}i=1∑naiki
题目分析:
本题主要问题是如何线性处理出 ai{a_i}ai 的逆元,我们令:
si=∏k=1iaks_i=\prod_{k=1}^ia_ksi=k=1∏iak
即 sis_isi 满足:
si=si−1ais_i=s_{i-1}a_isi=si−1ai
取倒数有:
1si=1si−11ai\frac 1 {s_i}=\frac1{s_{i-1}}\frac1{a_i}si1=si−11ai1
即:
1ai=si−11si\frac1{a_i}=s_{i-1}\frac 1{s_i}ai1=si−1si1
有了此式我们就可以通过 si=si−1ais_i=s_{i-1}a_isi=si−1ai 递推出 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相关推荐
- P5431 【模板】乘法逆元2(小学数学题,毒瘤鱼,卡常之王yyds)
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 P5431 [模板]乘法逆元2 题目传送门 题目大意: 给定 nnn 个正整数 aia_iai ,求 ...
- luogu P2613 【模板】有理数取余(费马小定理,乘法逆元)
整理的算法模板合集: ACM模板 目录 题目传送门 题目传送门 相当于是一个高精的费马小定理求乘法逆元.虽然数据达到了101000110^{10001}1010001,但是我们可以使用快读然后一直模m ...
- 洛谷——P3811 【模板】乘法逆元
P3811 [模板]乘法逆元 线性求逆元 逆元定义:若$a*x\equiv1 (\bmod {b})$,且$a$与$b$互质,那么我们就能定义: $x$为$a$的逆元,记为$a^{-1}$,所以我们也 ...
- 【luogu 3811】【模板】乘法逆元
题目背景 这是一道模板题 题目描述 给定n,p求1~n中所有整数在模p意义下的乘法逆元. 输入输出格式 输入格式: 一行n,p 输出格式: n行,第i行表示i在模p意义下的逆元. 输入输出样例 输入样 ...
- 题解 P3811 【【模板】乘法逆元】
P3811 [模板]乘法逆元 一个刚学数论的萌新,总结了一下这题的大部分做法 //一.费马小定理+快速幂 O(nlogn) 64分 #include<cstdio> using names ...
- 【训练题22:线性求逆元】【模板】乘法逆元 | 洛谷 P3811
[模板]乘法逆元 难度 普及/提高\color{yellow}普及/提高普及/提高 板子题,给出两种方法 题意 给 n,pn,pn,p 求出所有 i∈[1,n]i\in[1,n]i∈[1,n]在模 p ...
- gcd + 扩展欧几里得定理+递推乘法逆元(模板)
gcd: int gcd(int a, int b){ return b==0? a: gcd(b, a%b); } 扩张欧几里得定理: 扩展欧几里德算法是用来在已知a, b求解一组x,y使得ax+b ...
- java乘法逆元与除法取模,逆元
题目描述 题目描述 求关于x的同余方程ax≡1(mod b)的最小正整数解. 输入格式 每组输入数据只有一行,包含两个正整数a, b,用一个空格隔开. 数据规模: 对于40%的数据,2≤b≤1,000 ...
- 数论练习1 ( 曹冲养猪 + [POJ 2891]Strange Way to Express Integers + 乘法逆元【带证明】)
虽然作业还没有做完,但是我还是放不下它,对此,我只想说: 今天你对作业爱理不理,明天它就让你补到飞起 DP先放放,我们要雨露均沾 练习上手:乘法逆元 题目 题解 代码实现 曹冲养猪?(互质的中国剩余定 ...
- 乘法逆元(洛谷-P3811)
题目描述 给定n,p求1~n中所有整数在模p意义下的乘法逆元. 输入输出格式 输入格式: 一行n,p 1≤n≤3×10^6 ,n<p<20000528,输入保证 p 为质数. 输出格式: ...
最新文章
- 简略解释memset函数的用法
- Android基础总结(八)Service
- B树,B-树和B+树、B*树的区别
- SAP Spartacus 4.0 deprecation 之一 - i18next-xhr-backend
- java-多线程操作全(Thread)-Timer简单使用
- iis mysql5.7_手动配置网站环境 IIS 10+PHP 7.1+MySQL 5.7
- Nginx笔记-Nginx中进程结构及使用Linux信号量管理
- Grow heap (frag case) to 6.437MB for 1114126-byte allocation
- Vue中watch的使用
- Vue的单页应用中如何引用单独的样式文件
- VS 2010 for SharePoint
- linux 系统运维小工具
- MyBatis学习--查询缓存
- 安装matlab7.0步骤,Matlab 7.0 安装指导
- 怎样把pdf转换成word-多语言ocr支持
- vue.js基础 之 过滤器分类及使用
- 如何彻底对chrome降级
- 学习笔记---高等数学前置知识---约分、通分
- 如何成为一名云计算工程师
- mac如何查看IP地址,mac怎么查看IP地址
热门文章
- |2105|小泉的难题
- Ubuntu安装Lua
- vue设置右边距_那些PPT高手,都是怎样设置软件的
- 【shell】笔记|去重复行|删除匹配行|反选删除|反向显示|加减乘除
- @staticmethod的粗浅认识
- 服务器 进 pe系统安装系统安装系统,用U盘安装系统之PE安装.doc
- 工程训练大赛物流小车_宁大机械学子在工程训练省赛中斩获佳绩,取得历史性突破...
- 一次公司培训后的学习心得
- java 用遗传算法解决图像二值化问题 找阈值
- 程序设计与算法(一)第7周测验(2019夏季)