题意:
小Q非常喜欢数学,但是他的口算能力非常弱。因此他找到了小T,给了小T一个长度为n n的正整数序列a 1 ,a 2 ,…,a n a1,a2,…,an,要求小T抛出m m个问题以训练他的口算能力。
每个问题给出三个正整数l ,r ,d l,r,d,小Q需要通过口算快速判断a l ×a l +1 ×…×a r −1 ×a r al×al+1×…×ar−1×ar是不是d d的倍数。
小Q迅速地回答了出来,但是小T并不知道正确答案是什么,请写一个程序帮助小T计算这些问题的正确答案。
思路:
一开始bit套map 用前缀和处理,tle了?
对于每一个输入的数字,分解质因子,对于每一个质因子,把这个数字的位置push到这个质因子的vector里面去。
那么每一个vector里面的数字就是非递减的了。
然后对于每一个输入的l,r,d,把d分解质因子,对于每一个质因子,在这个质因子的vector里面找第一个大于等于l的位置和最后一个小于等于r的位置,相减,比较是否有d中这个质因子的数量多。
找的时候当然利用前面的非递减,所以可以二分。
代码:
Original: https://www.cnblogs.com/kickit/p/9165166.html
Author: qrfkickit
Title: hdu 6287 口算训练
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/604402/
转载文章受原作者版权保护。转载请注明原作者出处!