HDU 6287 口算訓練

2021-08-20 08:12:21 字數 1727 閱讀 3842

小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 ...