HD 6287 口算訓練

2021-08-20 08:07:53 字數 1519 閱讀 9417

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

1

5 46 4 7 2 5

1 2 24

1 3 18

2 5 17

3 5 35

sample output

yes no

noyes

直接寫的話會超時

所以可以先判斷數列中的每個數的質因數的個數,在分解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...