Description

  求sigma gcd(x,y)*2-1,1<=x<=n, 1<=y<=m。n, m<=1e5。

Solution

  f(n)为gcd正好是n的(x,y)的个数

  F(n)为gcd是n的倍数的(x,y)的个数

  我们要求的就是f(i)

  然而这个不好直接算,可F(i)可以直接用(n/i)*(m/i)得到

  那么有F(n)=sigma n|i f(i)

  于是有f(n)=sigma n|i mu(i)*F(i)

  这就是莫比乌斯反演,不过这道题直接用容斥的思想想也很容易得到上面那个式子

  那么考虑每一个gcd的贡献

  把n和m除以gcd后,就相当于要求n次f(1)

  每次均摊logn

Code

  也有不用反演的做法,大概是从后往前算,每一步都严格定义,用容斥做。

  这道题是我做的BZOJ第三题,不过当时只会80/90暴力然后去看的题解的容斥,那时候觉得把每一个gcd分开考虑贡献真是神奇,不过对于现在是再自然不过的想法了。

 #include<cstdio>
#include<algorithm>
#include<cstring>
#define ll long long
using namespace std;
const int maxn=1e5+; int flag[maxn],prime[maxn],cnt;
int mu[maxn];
int N,M; int getmu(){
mu[]=;
for(int i=;i<=N;i++){
if(!flag[i]){
mu[i]=-;
prime[++cnt]=i;
}
for(int j=;i*prime[j]<=N&&j<=cnt;j++){
flag[i*prime[j]]=;
if(i%prime[j]==){
mu[i*prime[j]]=;
break;
}
mu[i*prime[j]]=-mu[i];
}
}
} ll work(int x){
ll ret=;
int n=N/x,m=M/x;
for(int i=;i<=n;i++)
ret+=1ll*mu[i]*(n/i)*(m/i);
return ret;
} int main(){
scanf("%d%d",&N,&M);
if(N>M) swap(N,M);
getmu(); ll ans=;
for(int i=;i<=N;i++)
ans+=work(i)*(*i-);
printf("%lld\n",ans);
return ;
}

【莫比乌斯反演】BZOJ2005 [NOI2010]能量采集的更多相关文章

  1. BZOJ2005 NOI2010 能量采集 【莫比乌斯反演】

    BZOJ2005 NOI2010 能量采集 Description 栋栋有一块长方形的地,他在地上种了一种能量植物,这种植物可以采集太阳光的能量.在这些植物采集能量后,栋栋再使用一个能量汇集机器把这些 ...

  2. bzoj2005: [Noi2010]能量采集

    lsj师兄的题解 一个点(x, y)的能量损失为 (gcd(x, y) - 1) * 2 + 1 = gcd(x, y) *  2 - 1. 设g(i)为 gcd(x, y) = i ( 1 < ...

  3. [BZOJ2005][Noi2010]能量采集 容斥+数论

    2005: [Noi2010]能量采集 Time Limit: 10 Sec  Memory Limit: 552 MBSubmit: 4394  Solved: 2624[Submit][Statu ...

  4. BZOJ2005: [Noi2010]能量采集 莫比乌斯反演的另一种方法——nlogn筛

    分析:http://www.cnblogs.com/huhuuu/archive/2011/11/25/2263803.html 注:从这个题收获了两点 1,第一象限(x,y)到(0,0)的线段上整点 ...

  5. BZOJ2005:[NOI2010]能量采集(莫比乌斯反演,欧拉函数)

    Description 栋栋有一块长方形的地,他在地上种了一种能量植物,这种植物可以采集太阳光的能量.在这些植物采集能量后,栋栋再使用一个能量汇集机器把这些植物采集到的能量汇集到一起. 栋栋的植物种得 ...

  6. BZOJ2005: [Noi2010]能量采集(容斥原理 莫比乌斯反演)

    Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 4727  Solved: 2877[Submit][Status][Discuss] Descript ...

  7. [bzoj2005][Noi2010][能量采集] (容斥 or 欧拉函数)

    Description 栋栋有一块长方形的地,他在地上种了一种能量植物,这种植物可以采集太阳光的能量.在这些植物采集能量后, 栋栋再使用一个能量汇集机器把这些植物采集到的能量汇集到一起. 栋栋的植物种 ...

  8. BZOJ2005: [Noi2010]能量采集(欧拉函数)

    Description 栋栋有一块长方形的地,他在地上种了一种能量植物,这种植物可以采集太阳光的能量.在这些植物采集能量后, 栋栋再使用一个能量汇集机器把这些植物采集到的能量汇集到一起. 栋栋的植物种 ...

  9. 【数论】【莫比乌斯反演】【线性筛】bzoj2005 [Noi2010]能量采集

    http://blog.csdn.net/Clove_unique/article/details/51089272 Key:1.连接平面上某个整点(a,b)到原点的线段上有gcd(a,b)个整点. ...

随机推荐

  1. LambdaToSql 发布 兰姆达转换sql

    文档目录索引 查询.函数.分组.排序.分页 添加 Insert into 编辑 Update set 删除 Delete 生成实体 内置常用工具类库  文档完善中... 事务处理 Join 连接查询 ...

  2. MQ队列管理器搭建(三)

    MQ集群及网关队列管理器的搭建 描述:     如上图所示,为MQ的集群搭建部署图.CLUSTERA.CLUSTERB分别是两个集群,其中Qm1-Qm3.GateWayA为CLUSTERA集群中的队列 ...

  3. nginx日志中添加请求的response日志

    换个新公司,做一些新鲜的事情,经过一天的琢磨,终于成功添加response日志 在nginx的日志中添加接口response的日志 由于此功能在nginx内置的功能中没有,需要安装第三方模块ngx_l ...

  4. HBase最佳实践 - 集群规划

    本文由  网易云发布. 作者:范欣欣 本篇文章仅限本站分享,如需转载,请联系网易获取授权. HBase自身具有极好的扩展性,也因此,构建扩展集群是它的天生强项之一.在实际线上应用中很多业务都运行在一个 ...

  5. TabLayout:另一种Tab的实现方式

    http://blog.csdn.NET/aigestudio/article/details/47155769 在5.0以前我们想要实现像网易新闻客户端那样的的Tab可以有很多种选择: 比如古老的T ...

  6. Wex5执行Class[search.login__do] Method[login]失败

    ====================开发工具版本:WeX5_V3.3======================== 报错背景:大二的时候用这个工具开发了一款APP,备份了项目数据库的SQL文件+ ...

  7. 接口和抽象类的区别(JDK1.8)

    1.一个类只能进行单继承,但可以实现多个接口. 2.有抽象方法的类一定是抽象类,但是抽象类里面不一定有抽象方法: 接口里面所有的方法的默认修饰符为public abstract,接口里的成员变量默认的 ...

  8. C# 固定大小的缓存

    有时候需要把最新的N条记录暂时存起来供需要的时候调用,C#有没有指针,怎么办呢咱利用数组和byte字节整一个类 public class Buffer<T> { private T[] _ ...

  9. 当配置 DispatcherServlet拦截“/”,SpringMVC访问静态资源的三种方式

    如何你的DispatcherServlet拦截 *.do这样的URL,就不存在访问不到静态资源的问题.如果你的DispatcherServlet拦截“/”,拦截了所有的请求,同时对*.js,*.jpg ...

  10. Django模型层之字段查询参数及聚合函数

    该系列教程系个人原创,并完整发布在个人官网刘江的博客和教程 所有转载本文者,需在顶部显著位置注明原作者及www.liujiangblog.com官网地址. 字段查询是指如何指定SQL WHERE子句的 ...