problem description
小q非常喜歡數學,但是他的口算能力非常弱。因此他找到了小t,給了小t乙個長度為 n
的正整數序列 a
1,a2
,...
,an,要求小t丟擲 m
個問題以訓練他的口算能力。
每個問題給出三個正整數 l
,r,d
,小q需要通過口算快速判斷 a
l×al
+1×.
..×a
r−1×
ar是不是
d的倍數。
小q迅速地回答了出來,但是小t並不知道正確答案是什麼,請寫乙個程式幫助小t計算這些問題的正確答案。
input
第一行包含乙個正整數 t
(1≤t
≤10),表示測試資料的組數。
每組資料第一行包含兩個正整數 n
,m(1
≤n,m
≤100000
),分別表示序列長度以及問題個數。
第二行包含 n
個正整數 a
1,a2
,...
,an(
1≤ai
≤100000
),表示序列中的每個數。
接下來 m
行,每行三個正整數 l
,r,d
(1≤l
≤r≤n
,1≤d
≤100000
),表示每個問題。
output
對於每個問題輸出一行,若是倍數,輸出yes,否則輸出no。
sample input
15 46 4 7 2 5
1 2 24
1 3 18
2 5 17
3 5 35
sample output
yes nonoyes
直接寫的話會超時
所以可以先判斷數列中的每個數的質因數的個數,在分解d判斷d的質因數的區間[l,r]中的質因數的個數多少
#include #include#include#includeusing namespace std;
#define ll long long
const int maxn=1e5+5;
const int mod=1e5;
vectora[maxn];//
int query(int l , int r , int x)
int solve(int l , int r , int d)
if (cnt > query(l, r, i))
return 0;//如果i的個數小於應該有的個數,那麼就不能整除d,返回0}}
if (d > 1)
return 1;
}int main()
}if (x > 1) a[x].push_back(i);
}while (m--)
}return 0;
}
HDU 6287 口算訓練
小q非常喜歡數學,但是他的口算能力非常弱。因此他找到了小t,給了小t乙個長度為n的正整數序列a1,a2,an,要求小t丟擲m個問題以訓練他的口算能力。每個問題給出三個正整數l,r,d,小q需要通過口算快速判斷al al 1 ar 1 ar是不是d的倍數。小q迅速地回答了出來,但是小t並不知道正確答案...
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...