hdu 6134: Battlestation Operational (2017 多校第八场 1002)【莫比乌斯】
比赛时没抓住重点,对那个受限制的“分数求和”太过关心了。。其实如果先利用莫比乌斯函数的一个性质把后面那个[gcd(i,j)=1]去掉,那么问题就可以简化很多。公式如下

这和之前做过的一道题很相似。。(见http://www.cnblogs.com/Just--Do--It/p/7326572.html)
这个式子显然是可以用分块+预处理mu[i]前缀和的方法来做。
预处理复杂度是O(n),分块解决单组询问复杂度是O(sqrt(n))
求g[n]可以用递推式来解决。
对比g[n]和g[n-1],可以发现,当i整除n-1时,n/i比(n-1)/i大1,另外,g[n]比g[n-1]多末尾一项n/n(此处“/”即向上取整的除,因为我太懒了,就不写那么标准了。。),由此可以找到规律,g[n]=g[n-1]+d[n-1]+1。(很巧,那道题也用到了d[n])
代码如下
#include<bits/stdc++.h>
using namespace std;
typedef long long LL; const int mod=1e9+;
const int maxn=1e6+;
int prime[maxn+];
bool check[maxn+];
int d[maxn+];
int mu[maxn+];
int sum[maxn+];
int min_prime_cnt[maxn+];
int g[maxn+]; void init()
{
mu[]=,d[]=;
int tot=;
for(int i=; i<=maxn; i++)
{
if(!check[i])
{
prime[tot++]=i;
mu[i]=-;
min_prime_cnt[i]=;
d[i]=;
}
for(int j=; j<tot; j++)
{
int t=i*prime[j];
if(t>maxn) break;
check[t]=true;
if(i%prime[j]==)
{
mu[t]=;
min_prime_cnt[t]=min_prime_cnt[i]+;
d[t]=d[i]/(min_prime_cnt[i]+)*(min_prime_cnt[t]+);
break;
}
else
{
mu[t]=-mu[i];
d[t]=d[i]*;
min_prime_cnt[t]=;
}
}
}
g[]=;
for(int i=;i<=maxn;i++) g[i]=(g[i-]+d[i-]+)%mod;
for(int i=;i<=maxn;i++) g[i]=(g[i]+g[i-])%mod;
for(int i=;i<=maxn;i++) sum[i]=sum[i-]+mu[i];
} int n; int main()
{
init();
while(~scanf("%d",&n))
{
LL ans=;
for(int i=, last; i<=n; i=last+)
{
last=n/(n/i);
ans=(ans+(sum[last]-sum[i-])*g[n/i])%mod;
}
printf("%lld\n",(ans+mod)%mod);
}
}
hdu 6134: Battlestation Operational (2017 多校第八场 1002)【莫比乌斯】的更多相关文章
- HDU 6134 Battlestation Operational | 2017 Multi-University Training Contest 8
破结论没听说过,上式推导到第三步的时候有了O(nlogn) 的做法(枚举倍数+1最后前缀和),并且这种做法可以直接应用到向上取整的计算中,详见forever97 但由于d(n)是积性函数,故可O(n) ...
- hdu 6143: Killer Names (2017 多校第八场 1011)
题目链接 题意,有m种颜色,给2n个位置染色,使左边n个和右边n个没有共同的颜色. 可以先递推求出恰用i种颜色染n个位置的方案数,然后枚举两边的染色数就可以了,代码很简单. #include<b ...
- hdu 6134 Battlestation Operational 莫比乌斯反演
Battlestation Operational Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 65536/65536 K (Jav ...
- 2017多校第8场 HDU 6134 Battlestation Operational 莫比乌斯反演
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6134 题意: 解法: 那么g(n)怎么求,我们尝试打表发现g(n)是有规律的,g(n)=g(n-1)+ ...
- 2017ACM暑期多校联合训练 - Team 8 1002 HDU 6134 Battlestation Operational (数论 莫比乌斯反演)
题目链接 Problem Description The Death Star, known officially as the DS-1 Orbital Battle Station, also k ...
- HDU 6134 Battlestation Operational(莫比乌斯反演)
[题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=6134 [题目大意] 求$\sum_{i=1}^{n}{\sum_{j=1}^{i}\lceil{\ ...
- hdu 6134 Battlestation Operational (莫比乌斯反演+埃式筛)
Problem Description > The Death Star, known officially as the DS-1 Orbital Battle Station, also ...
- hdu 6127 : Hard challenge (2017 多校第七场 1008)(计算几何)
题目链接 题意:二维平面上有n个点(没有重叠,都不在原点,任意两点连线不过原点),每个点有一个权值,用一条过原点的直线把他们划分成两部分,使两部分的权值和的乘积最大.输出最大的乘积. 极角排序后,将原 ...
- 2019牛客多校第八场 F题 Flowers 计算几何+线段树
2019牛客多校第八场 F题 Flowers 先枚举出三角形内部的点D. 下面所说的旋转没有指明逆时针还是顺时针则是指逆时针旋转. 固定内部点的答案的获取 anti(A)anti(A)anti(A)或 ...
随机推荐
- p2p传输协议
老司机是如何飙车的——P2P传输协议 转载来自2017-03-27 15:23 点波蓝字关注变智者 秋明山上人行稀,常有车手较高低,如今车道依旧在,不见当年老司机.其实老司机们从未离去,只不过好的车手 ...
- 当在浏览器中输入一个url后回车,后台发生了什么?比如输入url后,你看到了百度的首页,那么这一切是如何发生的呢?
简单来书有以下步骤: 查找域名对应的IP地址.这一步会依次查找浏览器缓存,系统缓存,路由器缓存,ISPDNS缓存,13台根域名服务器. 向IP对应的服务器发送请求. 服务器响应请求,发回网页内容. 浏 ...
- vi, Java, Ant, Junit自学报告 - 实训week1
vi, Java, Ant, Junit自学报告 2017软件工程实训 15331023 陈康怡 vi Vi是linux系统的标准文本编辑器,采用指令的方式进行操作,此处仅记录部分常用的指令. vi模 ...
- Visual Studio关于项目迁移或拉取代码产生的dll黄色感叹号警告问题解决方案
今天换了台大电脑,准备好好爽一下, 就把笔记本上的项目拷贝到了台式机上, 但是我没有拷贝解决方案整个文件夹,因为其中项目太多了,我就把其中一个项目的文件夹直接拷贝到电脑上,然后就出现了下面的情况. 这 ...
- VGA时序及其原理(转载)
显示器扫描方式分为逐行扫描和隔行扫描:逐行扫描是扫描从屏幕左上角一点开始,从左像右逐点扫描,每扫描完一行,电子束回到屏幕的左边下一行的起始位置,在这期间,CRT对电子束进行消隐,每行结束时,用行同步信 ...
- Python笔记(二十三)_魔法方法_字符串的魔法方法
__str__和__repr__ 如果要把一个类的实例变成字符串,就需要实现魔法方法__str__()和__repr__ >>>class A: def name(self): re ...
- fiddler之简单的接口性能测试
在针对某一个/某一些接口,发送相同的请求,不考虑参数的变化时,可以使用fiddler进行简单的性能测试.(使用功能为:replay) 一.replay功能调用 (1.Reissue Requests: ...
- 嗯,python
总觉得在这么个地方已经没有在碰blog的可能了...但是... 突然说要用python来配置环境...好歹也是这个专业的啊...还是 看看吧... 然后 百度一搜,看到一个 好的 网站,不知道 我一旦 ...
- exsi中使用vSphere客户端复制克隆虚拟机
免费的VMWare ESXi5.5非常强大,使用ESXi经常会遇到这样的问题,我需要建立多个虚拟机,系统一个一个安装很麻烦.VMware ESXi.VMware vCenter Server 和 vS ...
- java 泛型的内部原理:类型擦除以及类型擦除带来的问题
一.Java泛型的实现方法:类型擦除前面已经说了,Java的泛型是伪泛型.为什么说Java的泛型是伪泛型呢?因为,在编译期间,所有的泛型信息都会被擦除掉.正确理解泛型概念的首要前提是理解类型擦出(ty ...