智乃酱的区间乘积(前缀积+逆元)
Posted MangataTS
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了智乃酱的区间乘积(前缀积+逆元)相关的知识,希望对你有一定的参考价值。
题目链接
https://ac.nowcoder.com/acm/contest/19483/A
题面
思路
我们要求区间的乘积在 1 e 9 + 7 1e9+7 1e9+7模下,那么这就是个前缀积的模板啦,和前缀和类似的,只不过我们需要初始化 p r e [ 0 ] pre[0] pre[0]为1,然后我们做一个除法的时候不能直接除,因为这样会有精度问题,所以这里我们需要使用逆元来协助我们进行除法运算
代码
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define mod 1000000007
const int N = 1e5+10;
ll pre[N],a[N];
int n,m;
ll qpow(ll a,ll b)
ll ans =1;
while(b)
if(b & 1) ans = ans * a % mod;
b >>= 1;
a = a * a % mod;
return ans;
ll inv(ll a)
return qpow(a,mod-2);
int main()
pre[0] = 1;
scanf("%d%d",&n,&m);
for(int i = 1;i <= n; ++i)
scanf("%lld",&a[i]);
pre[i] = pre[i - 1] * a[i] % mod;
int l,r;
while(m--)
scanf("%d %d",&l, &r);
printf("%lld\\n",pre[r] * inv(pre[l-1]) % mod);
return 0;
以上是关于智乃酱的区间乘积(前缀积+逆元)的主要内容,如果未能解决你的问题,请参考以下文章