洛谷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粉色 乙個小技巧 如果您的控制台是像我的...