hdu6287 口算訓練 思維 篩 二分

2021-09-11 01:42:48 字數 916 閱讀 6876

給你n個數,a,

m個詢問,每次詢問l,r,d

問[l,r]的乘積,是不是d的倍數

錢神和之前做的乙個篩的題很像,

就再總結一下吧

先都分解質因數,

然後對於數ai,ans[ai的質因數q]內放入位置i

注意相同的質因數得重複放入

然後對於d的每個質因數p,

二分查詢ans[p]內[l,r]的數有多少,

如果大於等於d的質因數p的數量就可行,

否則不可行

其實感覺題不算難

但喜歡這種思維題的感覺

就歸結到思維題裡吧

而且覺得自己這次**寫的還不錯

算是把線性篩稍微用熟練一點了吧

ans里計位置,res里計多次重複的素因子,

len用於記憶化搜尋

#include#include#include#include#includeusing namespace std;

const int maxn=1e5+10;

typedef long long ll;

int t;

int n,m,a[maxn];

int prime[maxn],cnt,len[maxn];

bool ok[maxn];

vectorans[maxn],res[maxn];

void init()

} if(tmp>1)res[tmp2].push_back(tmp); }}

void init2()

}int main()

while(m--)

now=0;}}

if(!flag)puts("no");

else puts("yes");

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