题面

洛谷P6788 「EZEC-3」四月樱花

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

\[ans=\left(\prod_{x=1}^n\prod_{y|x}\frac{y^{d(y)}}{\prod_{z|y}(z+1)^2}\right)\bmod p
\]

数据范围:\(1\le n\le 2.5\cdot 10^9\),\(9.9\cdot 10^8<p<1.1\cdot 10^9\)。


蒟蒻语

一道题撑起一场月赛,良心又劲爆。

膜拜出题人 @SOSCHINA,@muxii


蒟蒻解

开局一波猛操作:

\[y^{d(y)}=\prod_{z|y}y=\prod_{z|y}z\cdot\frac{y}{z}=\prod_{z|y}z^2
\]
\[s=\prod_{x=1}^n\prod_{y|x}\frac{y^{d(y)}}{\prod_{z|y}(z+1)^2}=\prod_{x=1}^n\prod_{y|x}\prod_{z|y}\left(\frac{z}{z+1}\right)^2=^{\color{#dd6622}{(1)}}\prod_{z=1}^n\left(\frac{z}{z+1}\right)^{2sumd(\lfloor\frac{n}{z}\rfloor)}
\]

\(\color{#dd6622}{(1)}\) 的原理就是 \(\sum_{z|y,y|n}=d(\frac{n}{z})\),其中 \(sumd(n)=\sum_{i=1}^n d(i)\)。


然后就是要求:

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

很明显 \(\frac{z}{z+1}\) 的前缀积是可以 \(\Theta(\log n)\) 求的,问题是怎么求 \(sumd(\lfloor\frac{n}{z}\rfloor)\)。

其实是可以分块套分块的,时间复杂度 \(\Theta(n^{\frac 34}+\sqrt{n}\log n)\),勉强卡得过去。

但是有两种时间复杂度 \(\Theta(n^{\frac 23}+\sqrt{n}\log n)\) 的方法:

第一种: 由 @alpha1022 巨佬提供,先筛出 \(n^{\frac 23}\) 的 \(sumd\),然后剩下分块套分块。

第二种:

蒟蒻的做法,看到数据范围和 \(\Theta(n^{\frac 23})\) 想到杜教筛。

很明显 \(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\) 的根号分块的前缀和,所以可以预处理形杜教筛。


代码

  1. //Data
  2. using mint=unsigned int;
  3. mint n,nn,mod,ans=1;
  4. mint m(mint x){(x>=mod)&&(x%=mod);return x;}
  5. mint p(mint x){(x>=mod-1)&&(x%=(mod-1));return x;}
  6. void mm(mint&x){(x>=mod)&&(x%=mod);}
  7. void pm(mint&x){(x>=mod-1)&&(x%=(mod-1));}
  8. mint mt(mint x,mint y){return 1ll*x*y%mod;}
  9. mint pt(mint x,mint y){return 1ll*x*y%(mod-1);}
  10. mint Pow(mint a,mint x){mint res=1;for(;x;a=mt(a,a),x>>=1)if(x&1) res=mt(res,a);return res;}
  11. //Sieve
  12. const mint N=5841399+1;
  13. bitset<N> np;
  14. vector<mint> prime;
  15. mint mc[N],d[N],mu[N];
  16. void Sieve(){
  17. np[1]=true,mc[1]=0,d[1]=mu[1]=1;
  18. R(i,2,nn){
  19. if(!np[i]) prime.pb(i),mc[i]=1,d[i]=2,mu[i]=mod-2;
  20. for(mint p:prime){
  21. if(!(i*p<nn)) break; np[i*p]=true;
  22. if(i%p==0){mc[i*p]=mc[i]+1,d[i*p]=d[i]/(mc[i]+1)*(mc[i*p]+1),mu[i*p]=0;break;}
  23. d[i*p]=d[i]*d[p],mu[i*p]=pt(mu[i],mu[p]),mc[i*p]=1;
  24. }
  25. }
  26. R(i,2,nn) pm(d[i]+=d[i-1]),pm(mu[i]+=mu[i-1]);
  27. }
  28. //DuSieve
  29. const mint iN=427+1;
  30. mint dud[iN],dumu[iN];
  31. bitset<iN> vis;
  32. mint D(mint i){return i<nn?d[i]:dud[n/i];}
  33. mint Mu(mint i){return i<nn?mu[i]:dumu[n/i];}
  34. void DuSieve(mint i){
  35. if(i<nn||vis[n/i]) return; vis[n/i]=true;
  36. for(mint l=1,r;l<=i;l=r+1) r=i/(i/l),DuSieve(i/l),
  37. pm(dumu[n/i]+=p(mod-1-pt(p(r-l+1),Mu(i/l)))); pm(dumu[n/i]+=1);
  38. for(mint l=2,r;l<=i;l=r+1) r=i/(i/l),
  39. pm(dud[n/i]+=p(mod-1-pt(p(mod-1+Mu(r)-Mu(l-1)),D(i/l)))); pm(dud[n/i]+=p(i));
  40. //必须先筛 mu,筛 d 时会用到 mu(i)
  41. }
  42. //Main
  43. int main(){
  44. read(n),read(mod),nn=1+pow(n,0.72),Sieve(),DuSieve(n); //事实证明0.72最快,可以卡进1s
  45. for(mint l=1,r;l<=n;l=r+1) r=n/(n/l),ans=mt(ans,Pow(mt(m(l),Pow(m(r+1),mod-2)),D(n/l)));
  46. write(mt(ans,ans)),putchar(10);
  47. return 0;
  48. }

祝大家学习愉快!

题解-洛谷P6788 「EZEC-3」四月樱花的更多相关文章

  1. 洛谷比赛 「EZEC」 Round 4

    洛谷比赛 「EZEC」 Round 4 T1 zrmpaul Loves Array 题目描述 小 Z 有一个下标从 \(1\) 开始并且长度为 \(n\) 的序列,初始时下标为 \(i\) 位置的数 ...

  2. 洛谷 P6788 - 「EZEC-3」四月樱花(整除分块)

    题面传送门 题意: 求 \[\prod\limits_{x=1}^n\prod\limits_{y|x}\frac{y^{d(y)}}{\prod\limits_{z|y}z+1} \pmod{p} ...

  3. [洛谷P3701]「伪模板」主席树

    题目大意:太暴力了,就不写了,看这儿 题解:对于每个$byx$的人,从源点向人连边,容量为此人的寿命. 对于每个手气君的人,从人向汇点连边,容量为此人的寿命. 对于每个$byx$的人与手气君的人,如果 ...

  4. LOJ 3119: 洛谷 P5400: 「CTS2019 | CTSC2019」随机立方体

    题目传送门:LOJ #3119. 题意简述: 题目说的很清楚了. 题解: 记恰好有 \(i\) 个极大的数的方案数为 \(\mathrm{cnt}[i]\),则答案为 \(\displaystyle\ ...

  5. LOJ 3120: 洛谷 P5401: 「CTS2019 | CTSC2019」珍珠

    题目传送门:LOJ #3120. 题意简述: 称一个长度为 \(n\),元素取值为 \([1,D]\) 的整数序列是合法的,当且仅当其中能够选出至少 \(m\) 对相同元素(不能重复选出元素). 问合 ...

  6. 洛谷 P4710 「物理」平抛运动

    洛谷 P4710 「物理」平抛运动 洛谷传送门 题目描述 小 F 回到班上,面对自己 28 / 110 的物理,感觉非常凉凉.他准备从最基础的力学学起. 如图,一个可以视为质点的小球在点 A(x_0, ...

  7. LOJ 2743(洛谷 4365) 「九省联考 2018」秘密袭击——整体DP+插值思想

    题目:https://loj.ac/problem/2473 https://www.luogu.org/problemnew/show/P4365 参考:https://blog.csdn.net/ ...

  8. 洛谷 P7879 -「SWTR-07」How to AK NOI?(后缀自动机+线段树维护矩乘)

    洛谷题面传送门 orz 一发出题人(话说我 AC 这道题的时候,出题人好像就坐在我的右侧呢/cy/cy) 考虑一个很 naive 的 DP,\(dp_i\) 表示 \([l,i]\) 之间的字符串是否 ...

  9. 洛谷 P7360 -「JZOI-1」红包(Min-Max 容斥+推式子)

    洛谷题面传送门 hot tea. 首先注意到这个 \(\text{lcm}\) 特别棘手,并且这里的 \(k\) 大得离谱,我们也没办法直接枚举每个质因子的贡献来计算答案.不过考虑到如果我们把这里的 ...

随机推荐

  1. 极客mysql03

    1.务的特性:原子性.一致性.隔离性.持久性 2.多事务同时执行的时候,可能会出现的问题:脏读.不可重复读.幻读 3.事务隔离级别:读未提交.读提交.可重复读.串行化 4.不同事务隔离级别的区别: 读 ...

  2. 45. 跳跃游戏 II

    给定一个非负整数数组,你最初位于数组的第一个位置. 数组中的每个元素代表你在该位置可以跳跃的最大长度. 你的目标是使用最少的跳跃次数到达数组的最后一个位置. 示例: 输入: [2,3,1,1,4]输出 ...

  3. UNP——第二章,TCP握手与挥手分析

    1.握手 说明: 下面涉及 FIN,SYN,ACK之类数据时,都是由TCP服务收发, 涉及 accept, listen 之类api,都是 应用进程 完成. 都统一使用 客户端,服务端描述,请自行分辨 ...

  4. jQuery 第十章 工具方法-高级方法 $.ajax() $.Callbacks() .....

     $.ajax() $.Callbacks() $.Deferred() .then() $.when() ---------------------------------------------- ...

  5. iOS 搜索条使用详解

    在ios开发中搜索条的使用挺常见的,不过之前一直没用到也没细细研究,最近做外包项目的时候刚好用到,在这里记录一下使用的过程,只要理解了原理,其实还是比较简单的!上传的图片有点大,刚好可以看清楚它的使用 ...

  6. 【ACwing 96】奇怪的汉诺塔——区间dp

    (题面来自ACwing) 汉诺塔问题,条件如下: 1.这里有A.B.C和D四座塔. 2.这里有n个圆盘,n的数量是恒定的. 3.每个圆盘的尺寸都不相同. 4.所有的圆盘在开始时都堆叠在塔A上,且圆盘尺 ...

  7. 牛客练习赛68 牛牛的无向图 题解(krusal思想)

    题目链接 题目大意 要你查询q 次询问,每次询问给出一个 L ,询问\(\sum_{i=1}^n\sum_{j=i+1}^n[d(i,j)<=L]\).其中 [C] 表示当命题 C 为真的时候为 ...

  8. C语言讲义——常量(constant)

    变量可以反复赋值:常量只能在定义时赋值,此后不得更改. 常量的定义需要加关键字const.如: #include <stdio.h> main() { const double PI=3. ...

  9. Pytest自动化测试 - 完美结合Allure

    简介 Allure Framework是一种灵活的.轻量级.多语言测试报告工具. 不仅可以以简洁的网络报告形式非常简洁地显示已测试的内容, 而且还允许参与开发过程的每个人从日常执行中提取最大程度的有用 ...

  10. Python中的静态属性、实例属性、静态方法、实例方法之间的区别