题解-洛谷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\)。
蒟蒻语
一道题撑起一场月赛,良心又劲爆。
蒟蒻解
开局一波猛操作:
\]
\]
\(\color{#dd6622}{(1)}\) 的原理就是 \(\sum_{z|y,y|n}=d(\frac{n}{z})\),其中 \(sumd(n)=\sum_{i=1}^n d(i)\)。
然后就是要求:
\]
很明显 \(\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\) 的根号分块的前缀和,所以可以预处理形杜教筛。
代码
//Data
using mint=unsigned int;
mint n,nn,mod,ans=1;
mint m(mint x){(x>=mod)&&(x%=mod);return x;}
mint p(mint x){(x>=mod-1)&&(x%=(mod-1));return x;}
void mm(mint&x){(x>=mod)&&(x%=mod);}
void pm(mint&x){(x>=mod-1)&&(x%=(mod-1));}
mint mt(mint x,mint y){return 1ll*x*y%mod;}
mint pt(mint x,mint y){return 1ll*x*y%(mod-1);}
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;}
//Sieve
const mint N=5841399+1;
bitset<N> np;
vector<mint> prime;
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*p<nn)) break; np[i*p]=true;
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;}
d[i*p]=d[i]*d[p],mu[i*p]=pt(mu[i],mu[p]),mc[i*p]=1;
}
}
R(i,2,nn) pm(d[i]+=d[i-1]),pm(mu[i]+=mu[i-1]);
}
//DuSieve
const mint iN=427+1;
mint dud[iN],dumu[iN];
bitset<iN> vis;
mint D(mint i){return i<nn?d[i]:dud[n/i];}
mint Mu(mint i){return i<nn?mu[i]:dumu[n/i];}
void DuSieve(mint i){
if(i<nn||vis[n/i]) return; vis[n/i]=true;
for(mint l=1,r;l<=i;l=r+1) r=i/(i/l),DuSieve(i/l),
pm(dumu[n/i]+=p(mod-1-pt(p(r-l+1),Mu(i/l)))); pm(dumu[n/i]+=1);
for(mint l=2,r;l<=i;l=r+1) r=i/(i/l),
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));
//必须先筛 mu,筛 d 时会用到 mu(i)
}
//Main
int main(){
read(n),read(mod),nn=1+pow(n,0.72),Sieve(),DuSieve(n); //事实证明0.72最快,可以卡进1s
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)));
write(mt(ans,ans)),putchar(10);
return 0;
}
祝大家学习愉快!
题解-洛谷P6788 「EZEC-3」四月樱花的更多相关文章
- 洛谷比赛 「EZEC」 Round 4
洛谷比赛 「EZEC」 Round 4 T1 zrmpaul Loves Array 题目描述 小 Z 有一个下标从 \(1\) 开始并且长度为 \(n\) 的序列,初始时下标为 \(i\) 位置的数 ...
- 洛谷 P6788 - 「EZEC-3」四月樱花(整除分块)
题面传送门 题意: 求 \[\prod\limits_{x=1}^n\prod\limits_{y|x}\frac{y^{d(y)}}{\prod\limits_{z|y}z+1} \pmod{p} ...
- [洛谷P3701]「伪模板」主席树
题目大意:太暴力了,就不写了,看这儿 题解:对于每个$byx$的人,从源点向人连边,容量为此人的寿命. 对于每个手气君的人,从人向汇点连边,容量为此人的寿命. 对于每个$byx$的人与手气君的人,如果 ...
- LOJ 3119: 洛谷 P5400: 「CTS2019 | CTSC2019」随机立方体
题目传送门:LOJ #3119. 题意简述: 题目说的很清楚了. 题解: 记恰好有 \(i\) 个极大的数的方案数为 \(\mathrm{cnt}[i]\),则答案为 \(\displaystyle\ ...
- LOJ 3120: 洛谷 P5401: 「CTS2019 | CTSC2019」珍珠
题目传送门:LOJ #3120. 题意简述: 称一个长度为 \(n\),元素取值为 \([1,D]\) 的整数序列是合法的,当且仅当其中能够选出至少 \(m\) 对相同元素(不能重复选出元素). 问合 ...
- 洛谷 P4710 「物理」平抛运动
洛谷 P4710 「物理」平抛运动 洛谷传送门 题目描述 小 F 回到班上,面对自己 28 / 110 的物理,感觉非常凉凉.他准备从最基础的力学学起. 如图,一个可以视为质点的小球在点 A(x_0, ...
- LOJ 2743(洛谷 4365) 「九省联考 2018」秘密袭击——整体DP+插值思想
题目:https://loj.ac/problem/2473 https://www.luogu.org/problemnew/show/P4365 参考:https://blog.csdn.net/ ...
- 洛谷 P7879 -「SWTR-07」How to AK NOI?(后缀自动机+线段树维护矩乘)
洛谷题面传送门 orz 一发出题人(话说我 AC 这道题的时候,出题人好像就坐在我的右侧呢/cy/cy) 考虑一个很 naive 的 DP,\(dp_i\) 表示 \([l,i]\) 之间的字符串是否 ...
- 洛谷 P7360 -「JZOI-1」红包(Min-Max 容斥+推式子)
洛谷题面传送门 hot tea. 首先注意到这个 \(\text{lcm}\) 特别棘手,并且这里的 \(k\) 大得离谱,我们也没办法直接枚举每个质因子的贡献来计算答案.不过考虑到如果我们把这里的 ...
随机推荐
- binary hacks读数笔记(objdump命令)
一.首先看一下几个常用参数的基本含义: objdump命令是Linux下的反汇编目标文件或者可执行文件的命令,它还有其他作用,下面以ELF格式可执行文件test为例详细介绍: 1.objdump -f ...
- jm8.6编解码器概述
自己在学习h264的路上,欢迎讨论交流. 前段时间研究JM出品的h264编码器,代码实在看不下去,因此换了个角度来研究诸多算法--逆向方式(解码),本系列文章记录一些遇到的东西和思考. 1. JM介绍 ...
- 微服务通信之feign的配置隔离
前言 由上文我们知道针对某一个Feign接口,我们可以给他设置特定的配置类.那如果现在有一个服务,我们只想对A服务配置一个拦截器拦截请求而不影响其他服务,那应该怎么做呢? 一.feign接口配置 由前 ...
- 还不懂Docker?一个故事安排的明明白白!
程序员受苦久矣 多年前的一个夜晚,风雨大作,一个名叫Docker的年轻人来到Linux帝国拜见帝国的长老. "Linux长老,天下程序员苦于应用部署久矣,我要改变这一现状,希望长老你能帮帮我 ...
- SpringSecurity之认证
SpringSecurity之认证 目录 SpringSecurity之认证 1. 盐值加密 1. 原理概述 2. 使用说明 1. 加密 2. 认证 1. 页面成功跳转的坑 2. 使用验证码校验的坑 ...
- elementui checkbox复选框实现层级联动
使用elementui 实现复选框的层级联动,可能我的表述不准确,先上一个效果图. 实际开发中可能遇到这样的场景,当选择高一层级的复选框时它包含的低级的复选框就不需要再勾选,需要默认选中并且禁止选用. ...
- C# 9 record 并非简单属性 POCO 的语法糖
C# 9 record 并非简单属性 POCO 的语法糖 最近升级专案到大统一 .NET 5 并使用 C#9 语法尝试改写套件,发现之前以为 record 只是简单属性 POCO 的简化语法糖的认知是 ...
- 学习netty遇到的关于 LineBasedFrameDecoder 的问题
最近在看<Netty权威指南>这本书,关于TCP粘包/拆包,书中使用的是 LineBasedFrameDecoder 来解决的,但是我在实践的过程中出现了问题,上代码吧. 这个是 serv ...
- LGOJ3101 [USACO14JAN]滑雪等级Ski Course Rating
LGOJ3101 [USACO14JAN]滑雪等级Ski Course Rating [问题描述] The cross-country skiing course at the winter Mool ...
- Java蓝桥杯02——第二题集锦:生日蜡烛、星期一、方格计数、猴子分香蕉
第二题 生日蜡烛(结果填空) 某君从某年开始每年都举办一次生日party,并且每次都要吹熄与年龄相同根数的蜡烛. 现在算起来,他一共吹熄了236根蜡烛. 请问,他从多少岁开始过生日party的? 请填 ...