我這裡在原題目上面加了擴充
修改:將2018改為x(x不是很大 ,其他題面內容不變
方法:首先將x分解質因子,變為 x=p
1e1∗
p2e2
∗...
∗pne
nx=p_^*p_^*...*p_^
x=p1e1
∗p2
e2∗
...∗
pnen
的形式
在[a,b]區間我們列舉 %x的餘數 i∈[
0,x−
1]
i\in [0,x-1]
i∈[0,x
−1] ,.然後將 i 裡x的質因子的數除掉,不夠的乘起來,最後得到乙個數y,相當於找到最小的y滿足 i∗y
%x=0
i*y\%x = 0
i∗y%x=
0,則i對應的是[c,d]裡y倍數的數量
單次詢問時間複雜度:o(x
∗xpr
i數量)
o(x*x_)
o(x∗xp
ri數量
)將下面**修改下可以過掉那題(文章最後面)。
**如下
#include
#define ll long long
const
int n =
2e5+5;
using
namespace std;
int x,a,b,c,d;
ll s1
(int l,
int r,
int mo)
ll s2
(int l,
int r,
int mo)
int pr[
100][2
],len;
intmain()
if(lx!=
1)pr[
++len][0
]=lx,pr[len][1
]=1;
ll ans=
s1(a,b,0)
*(d-c+1)
;//特判i=0
for(
int i=
1;i) ans+=s1
(a,b,i)*s2
(c,d,y);}
printf
("%lld\n"
,ans)
;return0;
}/**
2018 1 2 1 2018
2018 1 2018 1 2018
2018 1 1000000000 1 1000000000
*/
能ac這題的**
#include
#define ll long long
const
int n =
2e5+5;
using namespace std;
int x,a,b,c,d;
ll s1
(int l,
int r,
int mo)
ll s2
(int l,
int r,
int mo)
int pr[
100][2
],len;
intmain()
if(lx!=
1)pr[
++len][0
]=lx,pr[len][1
]=1;
while
(cin>>a>>b>>c>>d)
// printf("y=%d\n",y);
//printf("i=%d %d %d\n",i,y,s1(a,b,i)*s2(c,d,y));
ans+=s1
(a,b,i)*s2
(c,d,y);}
printf
("%lld\n"
,ans);}
return0;
}/**
*/
2019牛客國慶集訓派對day1
雖然我國慶七天溜回家了,隊友還是督促我好好打比賽.畢竟現場賽也沒幾天了,好好練習哈 判斷矩陣是否存在子矩陣滿足 x 1 le x le x 2,y 1 le y le y 2 內全是1,其他地方為0。水題,暴力判斷一下即可。include includeusing namespace std cha...
2019牛客國慶集訓派對day3 H
題意 動態插入一維線段端點為 li ri l i,r i li r i 查詢給定引數 li ri l i,r i li r i 問有多少條線段可以覆蓋它。我看了一眼感覺cdq可以寫我就寫了2333,複雜度是在o n log 2n l og2n o n log 2n log 2n o n lo g2 ...
2019牛客國慶集訓派對day7A題
題目理解 給你n,m,a在1到n中,b在1到m中,求a b 2016正整數對的個數 mod 1e9 7 題解 叉姐賊喜歡出這種題,不過確實這種題很好,這題是2016湖南省賽的題目,還有兩個類似的2017年四川省賽的2017和2018年湘潭邀請賽的2018 這幾個題都很像,不過考察的知識點各不相同,叉...