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 也准备了一些新鲜的东西,比如「高级统计」功能和「跳转应用商店」功能,帮助你更好地管理.优化应用,欢迎大家试用反馈:) 新增高级统计功能 这次更新 ...
随机推荐
- python入门神书!|python编程从入门到实践|内附网盘链接带提取码|
点击此处进入网盘下载地址 提取码:o39n 全书共有20章,书中的简介如下: 本书旨在让你尽快学会 Python ,以便能够编写能正确运行的程序 —— 游戏.数据可视化和 Web 应用程序,同时掌握让 ...
- PDOStatement::errorInfo
PDOStatement::errorInfo — 获取跟上一次语句句柄操作相关的扩展错误信息(PHP 5 >= 5.1.0, PECL pdo >= 0.1.0) 说明 语法 array ...
- JAVA学习:HashMap 和 ConcurrentHashMap
一.最基本的HashMap 和 ConcurrentHashMap 1.HashMap的结构和底层原理:由数组和链表组成,数组里面每个地方都存了Key-Value这样的实例,在Java7叫Entry ...
- 新浪、腾讯、淘宝为何如此重视Web前端?前端入门容易吗?
为什么新浪.搜狐.网易.腾讯.淘宝等在内的各种规模的IT企业,都对web前端越来越重视了呢?小编为您揭晓答案! web前端的由来 以前会Photoshop和Dreamweaver就可以制作网页.随着时 ...
- Linux输出缓存你知道多大吗?
今天看到这个代码很简单,就是验证一下Linux系统的输出缓存大小.当 猜一下这个代码的输出: #include <stdio.h> #include <string.h> #i ...
- Android Studio--APK打包
首先在app的build.gradle里面加一下代码 lintOptions { checkReleaseBuilds false abortOnError false } 在上方Build里面找到G ...
- 8道python练习题,能做出来的没几个
变量的定义 程序就是用来处理数据的,而变量就是用来存储数据的 很多人学习python,不知道从何学起.很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手.很多已经做案例的人,却不知道 ...
- 【av68676164(p21-p22)】线程
4.3.1 线程概念 线程的概念(Thread) 线程是可由CPU直接运行的实体 一个进程可以创建多个线程 多个线程可共享CPU可以实现并发运行 CreateThread() 功能:把一个函数创建为一 ...
- MySQL数据库——数据约束
1 什么数据约束 对用户操作表的数据进行约束 2 默认值(缺省约束) 作用: 当用户对使用默认值的字段不插入值的时候,就使用默认值. 注意: 1)对默认值字段插入null是可以的 2)对默认值字段可以 ...
- 剑指Offer顺时针打印矩阵
题目描述 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数 ...