[BZOJ2005][NOI2010]能量采集 数学
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2005
发现与$(0,0)$连线斜率相同的点会被挡住。也就是对于$(a,b)$且$gcd(a,b)==1$,在这条连线上$(da,db)$都会被挡住。
换种表达方式就是对于任意一个点$(x,y)$,会有$gcd(x,y)-1$个点被挡住。于是被挡住的点的个数是$$\sum_{i=1}^n\sum_{j=1}^mgcd(i,j)-1$$
即答案为$$Ans=\sum_{i=1}^n\sum_{j=1}^m2*gcd(i,j)-1$$
$$\frac{Ans-n*m}{2}=\sum_{i=1}^n\sum_{j=1}^mgcd(i,j)$$
现在的问题就在于如何快速求右边的东西。我们来接着推。
首先有一个东西$n=\sum_{d|n}φ(d)$,于是有$\sum_{i=1}^n\sum_{j=1}^mgcd(i,j)=$
$$\sum_{i=1}^n\sum_{j=1}^m\sum_{d|gcd(i,j)}φ(d)=$$
$$\sum_{d=1}^{min(n,m)}φ(d)\sum_{i=1}^n[d|i]\sum_{j=1}^m[d|j]=$$
$$\sum_{d=1}^{min(n,m)}φ(d)[\frac{n}{d}][\frac{m}{d}]$$
然后线性筛求欧拉函数,分块求和就行了。
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
typedef long long ll;
bool vis[];
int p[],pcnt=;
int phi[];
ll sum[];
void sieve(){
sum[]=;
for(int i=;i<=;i++){
if(!vis[i]){
vis[i]=true;
p[++pcnt]=i;
phi[i]=i-;
}
for(int j=;p[j]*i<=&&j<=pcnt;j++){
vis[p[j]*i]=true;
if(i%p[j]==){
phi[i*p[j]]=phi[i]*p[j];
break;
}
phi[i*p[j]]=phi[i]*(p[j]-);
}
sum[i]=sum[i-]+phi[i];
}
}
int main(){
sieve();
int n,m;
scanf("%d%d",&n,&m);
int t=min(n,m),la;
ll ans=;
for(int i=;i<=t;i=la+){
la=min(n/(n/i),m/(m/i));
ans+=(ll)(sum[la]-sum[i-])*(n/i)*(m/i);
}
ans=ans*-(ll)n*m;
printf("%lld\n",ans);
return ;
}
[BZOJ2005][NOI2010]能量采集 数学的更多相关文章
- BZOJ2005 NOI2010 能量采集 【莫比乌斯反演】
BZOJ2005 NOI2010 能量采集 Description 栋栋有一块长方形的地,他在地上种了一种能量植物,这种植物可以采集太阳光的能量.在这些植物采集能量后,栋栋再使用一个能量汇集机器把这些 ...
- 【bzoj2005】 [Noi2010]能量采集 数学结论(gcd)
[bzoj2005] [Noi2010]能量采集 Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnli ...
- bzoj2005: [Noi2010]能量采集
lsj师兄的题解 一个点(x, y)的能量损失为 (gcd(x, y) - 1) * 2 + 1 = gcd(x, y) * 2 - 1. 设g(i)为 gcd(x, y) = i ( 1 < ...
- BZOJ 2005 [Noi2010]能量采集 (数学+容斥 或 莫比乌斯反演)
2005: [Noi2010]能量采集 Time Limit: 10 Sec Memory Limit: 552 MBSubmit: 4493 Solved: 2695[Submit][Statu ...
- [NOI2010] 能量采集 (数学)
[NOI2010] 能量采集 题目描述 栋栋有一块长方形的地,他在地上种了一种能量植物,这种植物可以采集太阳光的能量.在这些植物采集能量后,栋栋再使用一个能量汇集机器把这些植物采集到的能量汇集到一起. ...
- [BZOJ2005][Noi2010]能量采集 容斥+数论
2005: [Noi2010]能量采集 Time Limit: 10 Sec Memory Limit: 552 MBSubmit: 4394 Solved: 2624[Submit][Statu ...
- NOI2010能量采集(数学)
栋栋有一块长方形的地,他在地上种了一种能量植物,这种植物可以采集太阳光的能量.在这些植物采集能量后,栋栋再使用一个能量汇集机器把这些植物采集到的能量汇集到一起. 栋栋的植物种得非常整齐,一共有n列,每 ...
- BZOJ2005:[NOI2010]能量采集(莫比乌斯反演,欧拉函数)
Description 栋栋有一块长方形的地,他在地上种了一种能量植物,这种植物可以采集太阳光的能量.在这些植物采集能量后,栋栋再使用一个能量汇集机器把这些植物采集到的能量汇集到一起. 栋栋的植物种得 ...
- BZOJ2005: [Noi2010]能量采集(容斥原理 莫比乌斯反演)
Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 4727 Solved: 2877[Submit][Status][Discuss] Descript ...
随机推荐
- LINQ体验(1)——Visual Studio 2008新特性
一.写本系列的目的 我平时利用课余零碎时间来学习ASP.NET3.5.LINQ.Silverlight.ASP.NET 3.5 Extensions等新东西,通过笔记形式来记录自己所学的历 程.也给大 ...
- TinyXml 与 Rapidxml效率对照
曾经在做开发中一直使用TinyXml,在网上搜索说Rapidxml的效率比tinyXml高.个人比較喜欢追求效率.所以忍不住尝试性使用Rapidxml. RapidXml 的官方站点例如以下: htt ...
- 嵌入式开发之davinci--- 8168 电源调试总结
http://www.61ic.com/Article/DaVinci/TMS320DM81x/201403/51863.html
- Android不刷机下的app2sd方法(dex cache占空间解决篇)
抱着5年的HTC G7这个古董,一直没有想法去换换. 近期微信.支付宝什么的apk应用都開始走程序巨型化,一次性就来个50MB的空间占用,让还是Android 2.2的手机怎样吃的消? 看看100多M ...
- POJ 3368 Frequent values RMQ ST算法/线段树
Frequent values Time Limit: 2000MS Memory Lim ...
- set 去重 会 破坏 原有list 的元素相对位置
feature_reduce_l = [i if re.search('\d', i) is None else i[0:re.search('\d', i).endpos - 1] for i in ...
- 每天进步一点点—mysql-mysqldump
一. 简单介绍 mysqldump是client用来备份数据库或者在不通数据库之间进行数据迁移的工具,备份内容包括创建表或者装载表的SQL语句 二. 命令格式 备份单个数 ...
- HEX文件格式学习笔记
这也是一篇学习摘抄:原文地址:http://blog.csdn.net/syrchina/article/details/7004998 为了编写一个可以按照自己的要求进行ISP的程序, ...
- 还在为AndroidStudio的Gradle版本配置头疼?看看老司机的解决方法吧
在AndroidStudio中新建项目成功后会自动下载对应版本的Gradle,那么下载的Gradle到什么地方呢? Mac上会默认下载到 /Users/<用户名>/.gradle/wrap ...
- 1.ARC下是否有内存溢出等问题 2.@property参数 3.#import和@class的区别
1.ARC下是否有内存溢出等问题? 答案:必须要担心啊,ARC也不是万能的.答案:必须要担心啊,ARC也不是万能的.这里主要是涉及到集合类的数据类型 比如数组,我们定义了一个可变数组muarr1, ...