我有一个来自互联网的问题,我有一个 N 个整数的数组,并且必须在给定数组的左(L)和右段(R)的情况下执行段乘法一些 T 次,并以给定的模数(M)为模返回答案.
约束
N,T<=100000
1<=L<=R<=N
M<=10^9
和整数 <=100
前任-
输入
5(N) 2 5 8 9 4 4(T) 1 2 3 2 3 4 1 1 1 1 5 100000
输出
1 0 0 2880
所以我已经解决了这个问题,但它有点慢我需要提示来优化我的程序。
#include "stdio.h"
int main(void)
{
int t;
scanf("%d",&t);
int Array[t+1];
for (int i = 1; i <=t; i++)
{
scanf("%d",&Array[i]);
}
int N;
scanf("%d",&N);
for (int i = 0; i <N ; i++)
{
long long a,b,c;
scanf("%lld%lld%lld",&a,&b,&c);
long long Product = 1;
if (c==1)
{
Product = 0;
}
else
{
for (int j = a; j <=b ; j++)
{
Product *= Array[j];
if (Product>=10000000000000000)
{
Product%=c;
}
}
}
Product%=c;
printf("%lld\n",Product );
}
return 0;
}