博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
P5431 【模板】乘法逆元2
阅读量:2153 次
发布时间:2019-04-30

本文共 1256 字,大约阅读时间需要 4 分钟。

题目

给定 n 个正整数 a i a_i ai,求它们在模 p p p 意义下的乘法逆元。

由于输出太多不好,所以将会给定常数 k k k,你要输出的答案为:
∑ i = 1 n k i a i \sum\limits_{i=1}^n\frac{k^i}{a_i} i=1naiki
当然要对 p 取模。

输入格式

第一行三个正整数 n,p,k 意义如题目描述。

第二行 n 个正整数 a_i ,是你要求逆元的数。

输出格式

输出一行一个整数,表示答案。

输入输出样例

输入

6 233 421 4 2 8 5 7

输出

91

说明/提示

对于 30 分的数据:

1 ≤ n ≤ 1 0 5 1≤n≤10^5 1n105
对于全部数据:
1 ≤ n ≤ 5 × 1 0 6 1≤n≤5×10^6 1n5×106

2 ≤ k < p ≤ 1 0 9 2≤k<p≤10^9 2k<p109

1 ≤ a i < p 1\le a_i < p 1ai<p
保证p为质数。

请注意常数优化 \color{red}\text{请注意常数优化} 请注意常数优化

思路

主流的做法是什么前缀积、后缀积,还有一堆常数优化。

但在一篇上看到更简单的方法:
首先边读入边通分,
我们由费马小定理: a p − 1 ≡ 1 ( m o d   p ) a^{p-1}≡1 (mod\ p) ap11(mod p),结合乘法逆元: a x ≡ 1 ( m o d   p ) ax≡1 (mod\ p) ax1(mod p)
可得: x = a p − 2 x=a^{p-2} x=ap2,再用快速幂求出即可

代码

#include
#include
#define ll unsigned long longusing namespace std;ll n,p,k,kt,a,at,b=1;ll read(){
char ch=getchar(); ll x=0; while(ch<'0'||ch>'9') ch=getchar(); while(ch>='0'&&ch<='9') {
x=(x<<3)+(x<<1)+ch-48; ch=getchar(); } return x;}ll fpow(ll a,ll b) //快速幂{
ll ans=1; while(b) {
if(b&1) ans=(ans*a)%p; a=a*a%p; b>>=1; } return ans;}int main() {
n=read(); p=read(); k=read(); kt=k%p; for(ll i=1;i<=n;i++) {
at=read(); a=(b*kt%p+a*at%p)%p; b=b*at%p; kt=kt*k%p; } printf("%lld",a*fpow(b,p-2)%p);}

转载地址:http://thpwb.baihongyu.com/

你可能感兴趣的文章
Java网络编程和NIO详解6:Linux epoll实现原理详解
查看>>
Java网络编程和NIO详解7:浅谈 Linux 中NIO Selector 的实现原理
查看>>
Java网络编程与NIO详解8:浅析mmap和Direct Buffer
查看>>
Java网络编程与NIO详解10:深度解读Tomcat中的NIO模型
查看>>
Java网络编程与NIO详解11:Tomcat中的Connector源码分析(NIO)
查看>>
深入理解JVM虚拟机1:JVM内存的结构与消失的永久代
查看>>
深入理解JVM虚拟机3:垃圾回收器详解
查看>>
深入理解JVM虚拟机4:Java class介绍与解析实践
查看>>
深入理解JVM虚拟机5:虚拟机字节码执行引擎
查看>>
深入理解JVM虚拟机6:深入理解JVM类加载机制
查看>>
深入了解JVM虚拟机8:Java的编译期优化与运行期优化
查看>>
深入理解JVM虚拟机9:JVM监控工具与诊断实践
查看>>
深入理解JVM虚拟机10:JVM常用参数以及调优实践
查看>>
深入理解JVM虚拟机11:Java内存异常原理与实践
查看>>
深入理解JVM虚拟机12:JVM性能管理神器VisualVM介绍与实战
查看>>
深入理解JVM虚拟机13:再谈四种引用及GC实践
查看>>
Spring源码剖析1:Spring概述
查看>>
Spring源码剖析2:初探Spring IOC核心流程
查看>>
Spring源码剖析3:Spring IOC容器的加载过程
查看>>
Spring源码剖析4:懒加载的单例Bean获取过程分析
查看>>