NC225632. 智乃酱的区间乘积
描述
输入描述
第一行输入一个正整数表示数组的长度和查询的次数。接下来输入一行个正整数表示数组的值。
输出描述
请输出一个非负整数,表示区间所有数字的连续乘积对取余数后的结果。
示例1
输入:
5 3 5 2 3 10 6 1 5 2 3 2 5
输出:
1800 6 360
C++ 解法, 执行用时: 256ms, 内存消耗: 2168K, 提交时间: 2022-02-09 17:38:37
#include <bits/stdc++.h> typedef long long ll; using namespace std; const ll mod=1e9+7; ll k[100002]; ll qsm(ll a,ll b) {ll ans=1; while(b) {if(b&1) ans=(ans*a)%mod; a=(a*a)%mod; b>>=1; } return ans; } int main() {int n,m; cin>>n>>m; int x; k[0]=1; for(int i=1;i<=n;i++) {cin>>x; k[i]=k[i-1]*x%mod; } while(m--) {int a,b; cin>>a>>b; cout<<k[b]*qsm(k[a-1],mod-2)%mod<<endl; } return 0; }
Python3 解法, 执行用时: 1343ms, 内存消耗: 16976K, 提交时间: 2023-05-22 21:11:25
N,M = map(int, input().split()) L = list(map(int, input().split())) MOD = 10**9+7 prefix_product = [1] * (N+1) for i in range(1, N+1): prefix_product[i] = prefix_product[i-1] * L[i-1] % MOD for i in range(M): l,r = map(int, input().split()) ans = (prefix_product[r] * pow(prefix_product[l-1], MOD-2, MOD)) % MOD print(ans)