LG P6788 「EZEC-3」四月樱花
Description
在樱花盛开的四月,Muxii 望着满天飘落的樱花,向身旁的 ZZH 问道:
“究竟有多少朵樱花在这个四月飘落?”
ZZH 答道:“樱花飘落的朵数 $s$与时间 $t$ 有如下关系:
$s=\prod_{x=1}^t \prod_{y|x} \frac{y^{d(y)}}{\prod_{z|y}(z+1)^2}$
其中 $d(y)$ 表示 $y$ 的约数个数。”
但作为一个文科生萌新,Muxii 显然无法清楚地知道具体的数目,因此他只好继续向 ZZH 询问这个问题的答案。
由于数量可能很大,所以你只需要替 ZZH 告诉 Muxii 他所需要的答案对 $p$ 取模的结果就好了。
Solution
题中所求为
$$ans=\left(\prod_{x=1}^n\prod_{y|x}\frac{y^{d(y)}}{\prod_{z|y}(z+1)^2}\right)\bmod p$$
大力操作式子:因为
$$y^{d(y)}=\prod_{z|y}y=\prod_{z|y}z\cdot\frac{y}{z}=\prod_{z|y}z^2$$
和
$$\sum_{z|y,y|n}=d(\frac{n}{z})$$
所以
$$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=\prod_{z=1}^n\left(\frac{z}{z+1}\right)^{2sumd(\lfloor\frac{n}{z}\rfloor)}$$
其中$sumd(n)=\sum_{i=1}^n d(i)$
由于要求$d$的前缀和,所以有杜教筛
设$f=d=1*1,g=\mu$,则$f*g=1*1*\mu=1$,可以使用杜教筛,现在需要求出$\mu$的前缀和
再次使用杜教筛即可
求原式的值可以用整除分块做
时间复杂度$\Theta(n^{\frac 23}+\sqrt{n}\log n)$

#include<iostream>
#include<cstdio>
using namespace std;
long long n,mod,pmod,prime[],mu[],minn[],d[],tot,summu[],sumd[],ans=;
bool isprime[],vst[];
inline long long read()
{
long long w=,f=;
char ch=;
while(ch<''||ch>'')
{
if(ch=='-')
f=-;
ch=getchar();
}
while(ch>=''&&ch<='')
{
w=(w<<)+(w<<)+ch-'';
ch=getchar();
}
return w*f;
}
long long Mu(long long x)
{
return x<=?mu[x]:summu[n/x];
}
long long D(long long x)
{
return x<=?d[x]:sumd[n/x];
}
void djs(long long N)
{
if(N<=||vst[n/N])
{
return;
}
vst[n/N]=true;
for(long long l=;l<=N;)
{
long long r=N/(N/l);
djs(N/l);
(summu[n/N]+=(pmod-(r-l+)*Mu(N/l)%pmod)%pmod)%=pmod;
l=r+;
}
(summu[n/N]+=)%=pmod;
for(long long l=;l<=N;)
{
long long r=N/(N/l);
(sumd[n/N]+=pmod-((Mu(r)-Mu(l-)+pmod)%pmod)*D(N/l)%pmod)%=pmod;
l=r+;
}
(sumd[n/N]+=N)%=pmod;
}
long long ksm(long long a,long long p)
{
long long ret=;
while(p)
{
if(p&)
{
(ret*=a)%=mod;
}
(a*=a)%=mod;
p>>=;
}
return ret;
}
int main()
{
n=read();
mod=read();
pmod=mod-;
mu[]=d[]=;
for(long long i=;i<=;i++)
{
if(!isprime[i])
{
prime[++tot]=i;
mu[i]=-;
d[i]=;
minn[i]=;
}
for(long long j=;j<=tot&&i*prime[j]<=;j++)
{
isprime[i*prime[j]]=true;
if(!(i%prime[j]))
{
minn[i*prime[j]]=minn[i]+;
d[i*prime[j]]=d[i]/(minn[i]+)*(minn[i*prime[j]]+);
mu[i*prime[j]]=;
break;
}
minn[i*prime[j]]=;
d[i*prime[j]]=d[i]*d[prime[j]];
mu[i*prime[j]]=mu[i]*-;
}
}
for(long long i=;i<=;i++)
{
(d[i]+=d[i-])%=pmod;
((mu[i]+=mu[i-])+=pmod)%=pmod;
}
djs(n);
for(long long l=;l<=n;)
{
long long r=n/(n/l);
(ans*=ksm(l*ksm(r+,mod-)%mod,D(n/l)))%=mod;
l=r+;
}
(ans*=ans)%=mod;
printf("%lld\n",ans);
return ;
}
四月樱花
LG P6788 「EZEC-3」四月樱花的更多相关文章
- 题解-洛谷P6788 「EZEC-3」四月樱花
题面 洛谷P6788 「EZEC-3」四月樱花 给定 \(n,p\),求: \[ans=\left(\prod_{x=1}^n\prod_{y|x}\frac{y^{d(y)}}{\prod_{z|y ...
- 洛谷 P6788 - 「EZEC-3」四月樱花(整除分块)
题面传送门 题意: 求 \[\prod\limits_{x=1}^n\prod\limits_{y|x}\frac{y^{d(y)}}{\prod\limits_{z|y}z+1} \pmod{p} ...
- 洛谷比赛 「EZEC」 Round 4
洛谷比赛 「EZEC」 Round 4 T1 zrmpaul Loves Array 题目描述 小 Z 有一个下标从 \(1\) 开始并且长度为 \(n\) 的序列,初始时下标为 \(i\) 位置的数 ...
- 「BZOJ 4228」Tibbar的后花园
「BZOJ 4228」Tibbar的后花园 Please contact lydsy2012@163.com! 警告 解题思路 可以证明最终的图中所有点的度数都 \(< 3\) ,且不存在环长是 ...
- 「BZOJ 3645」小朋友与二叉树
「BZOJ 3645」小朋友与二叉树 解题思路 令 \(G(x)\) 为关于可选大小集合的生成函数,即 \[ G(x)=\sum[i\in c ] x^i \] 令 \(F(x)\) 第 \(n\) ...
- 「PKUWC2018/PKUSC2018」试题选做
「PKUWC2018/PKUSC2018」试题选做 最近还没想好报THUSC还是PKUSC,THU发我的三类约(再来一瓶)不知道要不要用,甚至不知道营还办不办,协议还有没有用.所以这些事情就暂时先不管 ...
- 前端构建工具之gulp(一)「图片压缩」
前端构建工具之gulp(一)「图片压缩」 已经很久没有写过博客了,现下终于事情少了,开始写博吧 今天网站要做一些优化:图片压缩,资源合并等 以前一直使用百度的FIS工具,但是FIS还没有提供图片压缩的 ...
- fir.im Weekly - 如何打造 Github 「爆款」开源项目
最近 Android 转用 Swift 的传闻甚嚣尘上,Swift 的 Github 主页上已经有了一次 merge>>「Port to Android」,让我们对 Swift 的想象又多 ...
- 更新日志 - fir.im「高级统计」功能上线
距离 2016 年到来只剩 10 个日夜,fir.im 也准备了一些新鲜的东西,比如「高级统计」功能和「跳转应用商店」功能,帮助你更好地管理.优化应用,欢迎大家试用反馈:) 新增高级统计功能 这次更新 ...
随机推荐
- springboot 使用 dev tool 导致 CastException
1.背景 项目使用了 Spring + shiro 实现 权限控制, 使用AOP 对 每个 Controller 进行 log 记录时,需要从 shiro 中 获取 username字段, 问题就这样 ...
- PHP xml_error_string() 函数
定义和用法 xml_error_string() 函数获取 XML 解析器的错误描述.高佣联盟 www.cgewang.com 如果成功,该函数则返回错误描述.如果失败,则返回 FALSE. 语法 x ...
- C/C++编程笔记:C语言写推箱子小游戏,大一学习C语言练手项目
C语言,作为大多数人的第一门编程语言,重要性不言而喻,很多编程习惯,逻辑方式在此时就已经形成了.这个是我在大一学习 C语言 后写的推箱子小游戏,自己的逻辑能力得到了提升,在这里同大家分享这个推箱子小游 ...
- 电脑小知识:Windows 10是用什么语言写的?到底有多少行代码?
这是微软的内核工程师 Axel Rietschin在Quora的一个回答. Windows 10 的code base 和Windows 8.x , 7 , Vista , XP , 2000 和Wi ...
- idea查看类继承关系图
找到对应的类 查看类关系图
- layer.js : n.on is not a function
当时使用的jQuery为1.4.x的版本.换成高版本就好了. 参考 https://blog.csdn.net/marswill/article/details/69316003
- 怎么下载腾讯课堂M3U8格式的视频
好好学习,天天向上 本文已收录至我的Github仓库DayDayUP:github.com/RobodLee/DayDayUP,欢迎Star,更多文章请前往:目录导航 前言 用过腾讯课堂的小伙伴们可能 ...
- 使用ProxySQL实现MySQL Group Replication的故障转移、读写分离(一)
导读: 在之前,我们搭建了MySQL组复制集群环境,MySQL组复制集群环境解决了MySQL集群内部的自动故障转移,但是,组复制并没有解决外部业务的故障转移.举个例子,在A.B.C 3台机器上搭建了组 ...
- Xcode11更改启动页设置方法
新开了个项目,发现之前的启动页怎么也调不好,后来发现配置里边少了一行,所以整理一下,我使用的xcode版本是11. 以前的时候是在这2个中间,还有一行,通过下边2项来配置,现在更改了,附上新的教程.如 ...
- 记Java中有关内存的简单认识
一.Java内存划分 分为五个部分,可以参考这篇笔记简单认识一下: https://www.cnblogs.com/unleashed/p/13268027.html 栈 堆 方法区 本地方法栈 寄存 ...