智乃酱的区间乘积(前缀积+逆元)

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;

以上是关于智乃酱的区间乘积(前缀积+逆元)的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode#152-乘积最大子数组-前缀和扩展到前缀积

HDU - 5976 Detachment(逆元)

区间乘积的因子数之和——前缀和思想+定一移二

区间乘积的因子数之和——前缀和思想+定一移二

笛卡尔乘积的意义

多种解法解决高频面试题--除自身以外数组的乘积