題解 洛谷P6788 EZEC 3 四月櫻花

2022-02-24 22:35:18 字數 1855 閱讀 4066

洛谷p6788 「ezec-3」四月櫻花

給定 \(n,p\),求:

\[ans=\left(\prod_^n\prod_\frac}(z+1)^2}\right)\bmod p

\]

資料範圍:\(1\le n\le 2.5\cdot 10^9\),\(9.9\cdot 10^8。

一道題撐起一場月賽,良心又勁爆。

膜拜出題人 @soschina,@muxii。

開局一波猛操作:

\[y^=\prod_y=\prod_z\cdot\frac=\prod_z^2

\]\[s=\prod_^n\prod_\frac}(z+1)^2}=\prod_^n\prod_\prod_\left(\frac\right)^2=^}\prod_^n\left(\frac\right)^\rfloor)}

\]\(\color\) 的原理就是 \(\sum_=d(\frac)\),其中 \(sumd(n)=\sum_^n d(i)\)。

然後就是要求:

\[\prod_^n\left(\frac\right)^\rfloor)}

\]很明顯 \(\frac\) 的字首積是可以 \(\theta(\log n)\) 求的,問題是怎麼求 \(sumd(\lfloor\frac\rfloor)\)。

其實是可以分塊套分塊的,時間複雜度 \(\theta(n^+\sqrt\log n)\),勉強卡得過去。

但是有兩種時間複雜度 \(\theta(n^+\sqrt\log n)\) 的方法:

第一種:由 @alpha1022 巨佬提供,先篩出 \(n^\) 的 \(sumd\),然後剩下分塊套分塊。

第二種:

蒟蒻的做法,看到資料範圍和 \(\theta(n^)\) 想到杜教篩。

很明顯 \(d\) 這個東西不能直接篩,但是有乙個炫酷的魔術:杜教套杜教。

首先 \(f=d=1*1\),所以可以令 \(g=\mu\),\(f*g=1*1*\mu=1\),滿足 \(f*g\) 字首和可以速速求,問題是要求 \(\mu\) 的字首和。

於是再來一次:\(f=\mu\),\(g=1\),\(f*g=\mu*1=\epsilon\),就是杜教篩模板,隨意篩。

至於具體怎麼套可以看**,考慮到這題只需要求 \(n\) 及 \(n\) 的根號分塊的字首和,所以可以預處理形杜教篩。

//data

using mint=unsigned int;

mint n,nn,mod,ans=1;

mint m(mint x)

mint p(mint x)

void mm(mint&x)

void pm(mint&x)

mint mt(mint x,mint y)

mint pt(mint x,mint y)

mint pow(mint a,mint x)

//sieve

const mint n=5841399+1;

bitsetnp;

vectorprime;

mint mc[n],d[n],mu[n];

void sieve(){

np[1]=true,mc[1]=0,d[1]=mu[1]=1;

r(i,2,nn){

if(!np[i]) prime.pb(i),mc[i]=1,d[i]=2,mu[i]=mod-2;

for(mint p:prime){

if(!(i*pvis;

mint d(mint i){return i祝大家學習愉快!

P6788 EZEC 3 四月櫻花

p6788 ezec 3 四月櫻花 難點只有乙個 y prod y prod t cdot frac prod t 然而這點我整場月賽都沒想出來,技不如人甘拜下風。有了這個式子之後式子就隨便推了。出題人似乎稍微卡了一下 o n 的整除分塊。我卡了下常就過了。include define ll lon...

洛谷 P1101 題解

這道題可以用深搜 回溯 來寫,相信大部分人都是這麼想的,但是有些人可能在一些地方饒了半天,所以這裡就貼一下我的思路,個人覺得自己的很好懂,除了tx和ty那裡,但是tx和ty的那種用法對於輸出路徑的題目一般很實用 這個算是比較簡單的吧,題目裡給出了具體要找的字串,我們要做的就是對它進行8個方向的搜尋,...

洛谷 P1169 題解

請你在乙個黑白矩陣中選出乙個長方形 含正方形 和正方形的子矩陣,使得所有相鄰的點顏色不一樣。矩陣大小 兩條邊都 2000 2000 2 000輸入 3 31 0 1 0 1 0 1 0 0輸出4 6解釋給定矩陣 正方形 長方形 我的控制台是萌萌噠 ffc0cb粉色 乙個小技巧 如果您的控制台是像我的...