口算训练

口算训练

小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版权协议,转载请附上原文出处链接和本声明。