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;
}