链接:登录—专业IT笔试面试备考平台_牛客网
来源:牛客网
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 262144K,其他语言524288K
64bit IO Format: %lld题目描述
给定一个长度大小为N的正整数数组,查询M轮,每次问一个区间所有元素的连续乘积。
由于这个答案可能很大,你只用输出结果对10e9+7取余数后的结果即可。
输入描述:
第一行输入一个正整数N,M(1≤N,M≤1e5)表示数组的长度和查询的次数。
接下来输入一行N个正整数ai 1≤ai≤10e9表示数组的值。
输出描述:
请输出一个非负整数,表示区间所有数字的连续乘积对10e9+7取余数后的结果。示例1
输入
5 3 5 2 3 10 6 1 5 2 3 2 5
5 3 5 2 3 10 6 1 5 2 3 2 5输出
1800 6 360
1800 6 360备注:
注意要取模。整数加、减、乘可直接做,除要考虑逆元
AC代码:
#include <bits/stdc++.h> using namespace std; const int mod = 1e9 + 7; long long ksm(long long a,int b){ long long sum = 1; while(b){ if(b & 1){ sum = (sum * a) % mod; } a = a * a % mod; b >>= 1; } return sum; } void solve(){ int n,m; cin >> n >> m; long long a[100010]; long long b[100010]; b[0] = 1; b[1] = 1; for(int i = 1;i <= n;i ++){ cin >> a[i]; b[i] = b[i - 1] * a[i] % mod; } while(m --){ int l,r; cin >> l >> r; cout << b[r] * ksm(b[l - 1],mod - 2) % mod<< endl; } return; } int main(){ ios::sync_with_stdio(false); cin.tie(0);cout.tie(0); solve(); return 0; }
A.智乃酱的区间乘积
最新推荐文章于 2024-05-30 20:15:33 发布