LGP6788题解
太慢了!太慢了!我的替身 【The World】 是最强的替身!
\(O(n^{\frac 2 3})\) 的解法!不清楚用 sbt 能不能更快一些,可能会吧。灵感来源于BZOJ4176,同时也可看到我也是 BZOJ4176 的最优解。理所当然地,我也是 P6788 的最优解
首先看着这个柿子:
\]
考虑将 \(d^{\sigma_0(d)}\) 展开:
\]
设 \(kx=d\):
\]
容易发现 \(\prod_{k|d}k \times (\frac d k)=\prod_{k|d} k \times \prod_{k|d}k=(\prod_{k|d}k)^2\)
所以:
\]
\]
大多数同学是使用整除分块暴力计算 \(\sum_{i=1}^n \lfloor \frac n i \rfloor\) 而达到 \(O(n^{\frac 3 4})\) 的复杂度,但是这玩意儿其实有性质。
\]
所以这玩意儿相当于求 \(\sigma_0\) 的块筛。求块筛的常见做法是使用杜教筛或挖掘性质,这里考虑杜教筛。
因为 \(\sigma_0 = 1 * 1\),所以考虑配对一个 \(\mu\) 上去,使其变为 \(1\)。
只需要同时筛 \(mu\) 和 \(\sigma_0\) 即可。
没有必要对 \(n^{\frac 2 3}\) 以下的 \(\sigma_0\) 使用整除分块计算前缀和,因为在筛 \(\mu\) 的同时把 \(\sigma_0\) 也筛了,这样反而会增加常数。同样也没有必要使用 sbt。
upd:我麻烦了,不需要使用杜教筛,小部分线性筛大部分整除分块即可。其他的好像都没这个快。
#include<cstdio>
#include<cmath>
typedef unsigned ui;
typedef unsigned long long ull;
const int M=2e6;
ui n,mod,lim,top,pri[149000],idx[M+5],d[M+5];
double inv[200005];
inline ui Pow(ui a,ui b=mod-2){
ui ans(1);
for(;b;b>>=1,a=1ull*a*a%mod)if(b&1)ans=1ull*ans*a%mod;
return ans;
}
inline void sieve(const ui&M){
register ui i,j,x;d[1]=1;
for(i=2;i<=M;++i){
if(!d[i])pri[++top]=i,d[i]=2,idx[i]=1;
for(j=1;j<=top&&(x=i*pri[j])<=M;++j){
if(!(i%pri[j])){
idx[x]=idx[i]+1;d[x]=((ui)(d[i]*inv[idx[x]]))*(idx[x]+1);break;
}
idx[x]=1;d[x]=d[i]*2;
}
}
for(i=1;i<=M;++i)d[i]+=d[i-1];
}
inline ui GetSd(const ui&n){
if(n<=lim)return d[n];
ull ans(0);ui i;
for(i=1;i*i<=n;++i)ans+=n*inv[i];
return ((ans<<1)-(i-1)*(i-1))%(mod-1);
}
signed main(){
register ui i,x,L,R,ans=1;
scanf("%u%u",&n,&mod);
for(i=1;(i-1)*(i-1)<=n;++i)inv[i]=1./i+1e-15;sieve(lim=ceil(pow(n,2./3)));
for(L=1;L*L<=n;++L)ans=1ull*ans*Pow(1ull*L*Pow(L+1)%mod,GetSd(n*inv[L]))%mod;
for(x=n*inv[L];L<=n;L=R+1){
if(x*L>n)--x;R=n*inv[x];
ans=1ull*ans*Pow(1ull*L*Pow(R+1)%mod,GetSd(x))%mod;
}
printf("%u",1ull*ans*ans%mod);
}
LGP6788题解的更多相关文章
- 2016 华南师大ACM校赛 SCNUCPC 非官方题解
我要举报本次校赛出题人的消极出题!!! 官方题解请戳:http://3.scnuacm2015.sinaapp.com/?p=89(其实就是一堆代码没有题解) A. 树链剖分数据结构板题 题目大意:我 ...
- noip2016十连测题解
以下代码为了阅读方便,省去以下头文件: #include <iostream> #include <stdio.h> #include <math.h> #incl ...
- BZOJ-2561-最小生成树 题解(最小割)
2561: 最小生成树(题解) Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1628 Solved: 786 传送门:http://www.lyd ...
- Codeforces Round #353 (Div. 2) ABCDE 题解 python
Problems # Name A Infinite Sequence standard input/output 1 s, 256 MB x3509 B Restoring P ...
- 哈尔滨理工大学ACM全国邀请赛(网络同步赛)题解
题目链接 提交连接:http://acm-software.hrbust.edu.cn/problemset.php?page=5 1470-1482 只做出来四道比较水的题目,还需要加强中等题的训练 ...
- 2016ACM青岛区域赛题解
A.Relic Discovery_hdu5982 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Jav ...
- poj1399 hoj1037 Direct Visibility 题解 (宽搜)
http://poj.org/problem?id=1399 http://acm.hit.edu.cn/hoj/problem/view?id=1037 题意: 在一个最多200*200的minec ...
- 网络流n题 题解
学会了网络流,就经常闲的没事儿刷网络流--于是乎来一发题解. 1. COGS2093 花园的守护之神 题意:给定一个带权无向图,问至少删除多少条边才能使得s-t最短路的长度变长. 用Dijkstra或 ...
- CF100965C题解..
求方程 \[ \begin{array}\\ \sum_{i=1}^n x_i & \equiv & a_1 \pmod{p} \\ \sum_{i=1}^n x_i^2 & ...
随机推荐
- 隐式意图&显示意图
1 隐式意图 通过指定一组动作或者数据 开启activity 2 显示意图 通过指定具体包名和类名 开启activity 总结 (1)显示意图更加安全一些 ( ...
- 关于在 Linux 下多个不相干的进程互斥访问同一片共享内存的问题
转载请注明来源:https://www.cnblogs.com/hookjc/ 这里的"不相干",定义为: 这几个进程没有父子关系,也没有 Server/Client 关系 这一片 ...
- 【struts2】中method={1}详解
我们在使用struts2的时候,有时候为了简化struts2的配置项而采用通配符的方式,如下代码: <action name="ajaxregister!*" class=& ...
- Shell条件练习题
Shell条件练习题 目录 Shell条件练习题 1.检查用户家目录中的 test.sh 文件是否存在,并且检查是否有执行权限 2.提示用户输入100米赛跑的秒数,要求判断秒数大于0且小于等于10秒的 ...
- .NET 6全文检索引擎Lucene.NET 4.8简单封装
前言 因为最近在做一个检索数据的工具.最开始用的Mysql8自带的全文检索功能.但是发现这货数据量超过百万之后,检索速度直线下降. 于是想到Lucene.net.花了一晚上时间做了简单的封装.可以直接 ...
- 在Excel VBA中使用SQL到底优势在哪儿
小爬在之前的博文中多次提到,可以在VBA中写SQL来操作Excel文件,实现各类数据处理和分析需求.那么,你可能有这样的疑问:Excel原生的VBA,数据透视表,数据分析功能不够吗,为啥一定要用SQL ...
- sublime中运行python时编码格式问题
方案一在程序文件中以下三句 import sys reload(sys) sys.setdefaultencoding('utf8') 方案二在方案一不行的情况下,去除python的问题,subl ...
- Lesson17——NumPy 统计函数
NumPy 教程目录 1 NumPy 统计函数 NumPy 提供了很多统计函数,用于从数组中查找最小元素,最大元素,百分位标准差和方差等. 函数说明如下 1.1 统计 method descripti ...
- MySQL基本数据类型与约束条件
昨日内容回顾 数据存储的演变 # 方向: 朝着更加统一和方便管理 数据库的发展史 # 由本地保存逐步演变为线上保存 数据库的本质 # 本质上就是一款CS架构的软件 """ ...
- NVDA、争渡读屏语音开放API接口
什么是读屏软件? 读屏软件是一种专为视力障碍人士设计的,能够辅助视障人士操作计算机的工具,它可以将屏幕上显示的内容用语音朗读出来,这样视障人士就可以正常使用电脑了. 知名的屏幕阅读软件国内有争渡读屏. ...