口算训练
小Q非常喜欢数学,但是他的口算能力非常弱。因此他找到了小T,给了小T一个长度为nn的正整数序列a1,a2,…,ana1,a2,…,an,要求小T抛出mm个问题以训练他的口算能力。
每个问题给出三个正整数l,r,dl,r,d,小Q需要通过口算快速判断al×al+1×…×ar−1×aral×al+1×…×ar−1×ar是不是dd的倍数。
小Q迅速地回答了出来,但是小T并不知道正确答案是什么,请写一个程序帮助小T计算这些问题的正确答案。
Input
第一行包含一个正整数T(1≤T≤10),表示测试数据的组数。
每组数据第一行包含两个正整数n,m(1≤n,m≤100000),分别表示序列长度以及问题个数。
第二行包含n个正整数a1,a2,…,an(1≤ai≤100000),表示序列中的每个数。
接下来m行,每行三个正整数l,r,d(1≤l≤r≤n,1≤d≤100000),表示每个问题。
Output
对于每个问题输出一行,若是倍数,输出Yes,否则输出No。
Sample Input
1
5 4
6 4 7 2 5
1 2 24
1 3 18
2 5 17
3 5 35
Sample Output
Yes
No
No
Yes
#include<iostream>
using namespace std;
#define M 100000
int main()
{
int T;
cin>>T;
while(T--)
{
int n,m;
cin>>n>>m;
int figure[M],ques[M][M];
for(int i=0;i<n;i++)
cin>>figure[i];
for(int i=0;i<m;i++)
{
for(int j=0;j<3;j++)
cin>>ques[i][j];
cout<<endl;
}
for(int i=0;i<ques[i][0];i++)
{
int mul=figure[ques[i][0]-1];
for(int j=1;j<ques[i][1];j++)
mul=mul*figure[(ques[i][0]-1)+1];
if(mul%ques[i][2]==0)
cout<<"YES"<<endl;
else
cout<<"NO"<<endl;
}
}
}
版权声明:本文为w_1106原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。