給你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...