小q非常喜歡數學,但是他的口算能力非常弱。因此他找到了小t,給了小t乙個長度為n的正整數序列a1,a2,…,an,要求小t丟擲m個問題以訓練他的口算能力。
每個問題給出三個正整數l,r,d,小q需要通過口算快速判斷al×al+1×…×ar−1×ar是不是d的倍數。
小q迅速地回答了出來,但是小t並不知道正確答案是什麼,請寫乙個程式幫助小t計算這些問題的正確答案。
第一行包含乙個正整數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),表示每個問題。
對於每個問題輸出一行,若是倍數,輸出yes,否則輸出no。
15 4
6 4 7 2 5
1 2 24
1 3 18
2 5 17
3 5 35
yesno
noyes
將輸入的每個a陣列分解質因數、記錄,對d分解質因數判斷a陣列是否有足夠的因數能夠相乘滿足成為輸入d的倍數。
#include
using
namespace std;
#define mem(a,b) memset(a,b,sizeof(a))
#define pb push_back
typedef
long
long ll;
typedef
unsigned
long
long ull;
typedef pair<
int,
int> p;
const
int inf =
0x3f3f3f3f
;const
int maxn =
1e5+5;
const
int mod =
1e9+7;
const
double eps =
1e-8
;const
double pi =
asin
(1.0)*
2;const
double e =
2.718281828459
;void
fre(
)int t;
int n, m;
vector<
int> g[maxn]
;int
query
(int l,
int r,
int x)
bool
solve
(int l,
int r,
int d)
if(cnt >
query
(l, r, i))}
}if(d >1)
}return1;
}int
main()
}scanf
("%d%d"
,&n,
&m);
for(
int i =
1, x; i <= n;
++i)}if
(x >1)
}while
(m--)}
return0;
}
HDU 6287 口算訓練
小q非常喜歡數學,但是他的口算能力非常弱。因此他找到了小t,給了小t乙個長度為n的正整數序列a1,a2,an,要求小t丟擲m個問題以訓練他的口算能力。每個問題給出三個正整數l,r,d小q需要通過口算快速判斷al al 1 ar 1 a r al al 1 ar 1 ar 是不是d的倍數。小q迅速地回...
hdu 6287 口算訓練
題意 小q非常喜歡數學,但是他的口算能力非常弱。因此他找到了小t,給了小t乙個長度為n n n的正整數序列a1,a2,a n a1,a2,an a1,a2,an,要求小t丟擲m m m個問題以訓練他的口算能力。每個問題給出三個正整數l,r d l,r,d l,r,d,小q需要通過口算快速判斷al a...
HDU6287 口算訓練(莫隊演算法)
小q非常喜歡數學,但是他的口算能力非常弱。因此他找到了小t,給了小t乙個長度為 nn 的正整數序列 a1 a2,ana1,a2,an 要求小t丟擲 mm 個問題以訓練他的口算能力。每個問題給出三個正整數 l,r,dl,r,d 小q需要通過口算快速判斷 al al 1 ar 1 a ral al 1 ...