BZOJ 2005: [Noi2010]能量采集(莫比乌斯反演)

时间:2022-02-19 12:46:39

http://www.lydsy.com/JudgeOnline/problem.php?id=2005

题意:

BZOJ 2005: [Noi2010]能量采集(莫比乌斯反演)
 
思路:
首先要知道一点是,某个坐标(x,y)与(0,0)之间的整数点的个数为gcd(x,y),这样一来每个坐标损失的能量为2*gcd(x,y)-1。
所以在这道题目中要计算的就是BZOJ 2005: [Noi2010]能量采集(莫比乌斯反演)
 
f(d)表示gcd(x,y)=d的对数,那么F(d)表示d|gcd(x,y)的对数。
根据反演可以得到,BZOJ 2005: [Noi2010]能量采集(莫比乌斯反演)
那么这道题的答案就是,BZOJ 2005: [Noi2010]能量采集(莫比乌斯反演)
 #include<iostream>
#include<algorithm>
#include<cstring>
#include<cstdio>
#include<sstream>
#include<vector>
#include<stack>
#include<queue>
#include<cmath>
#include<map>
#include<set>
using namespace std;
typedef long long ll;
typedef pair<int,int> pll;
const int INF = 0x3f3f3f3f;
const int maxn = + ; bool check[maxn];
int prime[maxn];
int mu[maxn];
ll sum[maxn]; void Mobius()
{
memset(check, false, sizeof(check));
mu[] = ;
int tot = ;
for (int i = ; i <= maxn; i++)
{
if (!check[i])
{
prime[tot++] = i;
mu[i] = -;
}
for (int j = ; j < tot; j++)
{
if (i * prime[j] > maxn)
{
break;
}
check[i * prime[j]] = true;
if (i % prime[j] == )
{
mu[i * prime[j]] = ;
break;
}
else
{
mu[i * prime[j]] = -mu[i];
}
}
}
sum[]=;
for(int i=;i<maxn;i++)
sum[i]=sum[i-]+mu[i];
return ;
} ll solve(int n, int m)
{
if(n>m) swap(n,m);
ll tmp=;
for(int i=,last=;i<=n;i=last+)
{
last=min(n/(n/i),m/(m/i));
tmp+=(sum[last]-sum[i-])*(n/i)*(m/i);
}
return tmp;
} int n, m; int main()
{
//freopen("in.txt","r",stdin);
Mobius();
while(~scanf("%d%d",&m,&n))
{
ll ans=;
for(int i=;i<=min(n,m);i++) //枚举d
ans+=solve(n/i,m/i)*i; //这儿求gcd(x,y)=d的对数,但是如果/i的话就相当于计算gcd(x,y)=1的对数
//简化了计算
printf("%lld\n",*ans-(ll)n*m);
}
return ;
}

BZOJ 2005: [Noi2010]能量采集(莫比乌斯反演)的更多相关文章

  1. BZOJ 2005&colon; &lbrack;Noi2010&rsqb;能量采集 &lbrack;莫比乌斯反演&rsqb;

    题意:\((0,0)\)到\((x,y),\ x \le n, y \le m\)连线上的整点数\(*2-1\)的和 \((0,0)\)到\((a,b)\)的整点数就是\(gcd(a,b)\) 因为. ...

  2. BZOJ 2005 &lbrack;Noi2010&rsqb;能量采集 &lpar;数学&plus;容斥 或 莫比乌斯反演&rpar;

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

  3. bzoj 2005&colon; &lbrack;Noi2010&rsqb;能量采集 筛法&vert;&vert;欧拉&vert;&vert;莫比乌斯

    2005: [Noi2010]能量采集 Time Limit: 10 Sec  Memory Limit: 552 MB[Submit][Status][Discuss] Description 栋栋 ...

  4. BZOJ 2005&colon; &lbrack;Noi2010&rsqb;能量采集

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

  5. BZOJ 2005&colon; &lbrack;Noi2010&rsqb;能量采集&lpar; 数论 &plus; 容斥原理 &rpar;

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

  6. luogu1447 &lbrack;NOI2010&rsqb;能量采集 莫比乌斯反演

    link 冬令营考炸了,我这个菜鸡只好颓废数学题了 NOI2010能量采集 由题意可以写出式子: \(\sum_{i=1}^n\sum_{j=1}^m(2\gcd(i,j)-1)\) \(=2\sum ...

  7. bzoj 2005&colon; &lbrack;Noi2010&rsqb;能量采集【莫比乌斯反演】

    注意到k=gcd(x,y)-1,所以答案是 \[ 2*(\sum_{i=1}^{n}\sum_{i=1}^{m}gcd(i,j))-n*m \] 去掉前面的乘和后面的减,用莫比乌斯反演来推,设n&lt ...

  8. BZOJ2005&colon; &lbrack;Noi2010&rsqb;能量采集 莫比乌斯反演的另一种方法——nlogn筛

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

  9. 【刷题】BZOJ 2005 &lbrack;Noi2010&rsqb;能量采集

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

  10. BZOJ2005&colon;&lbrack;NOI2010&rsqb;能量采集&lpar;莫比乌斯反演&comma;欧拉函数&rpar;

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

随机推荐

  1. ArcGIS Engine开发之地图基本操作(4)

    ArcGIS Engine开发中数据库的加载 1.加载个人地理数据库数据 个人地理数据库(Personal Geodatabase)使用Miscrosoft Access文件(*.mdb)进行空间数据 ...

  2. eclipse中mybatis&lowbar;generator插件的安装与使用

    git地址:https://github.com/mybatis/generator 下载后解压: 选择任意一个版本的jar放到eclipse的features目录下即可 选择任意一个版本的jar放到 ...

  3. cs11&lowbar;adventure c&plus;&plus;&lowbar;lab1

    exercise1.cc #include <iostream> #include <vector> #include <stdlib.h> #include &l ...

  4. #笔记#JavaScript进阶篇一

    #JavaScript进阶篇 http://www.imooc.com/learn/10 #认识DOM #window对象 浏览器窗口可视区域监测—— 在不同浏览器(PC)都实用的 JavaScrip ...

  5. visualvm添加远程管理-centos

    VisualVM连接远程服务器有两种方式:JMX和jstatd,两种方式都不能完美支持所有功能,例如JMX不支持VisualGC,jstatd不支持CPU监控,实际使用可同时配置上并按需选用. 1.修 ...

  6. Java 嵌套作用域

    在C/C++中,当一个块处于另一个块作用域内的时候,内层定义的变量会把外层的变量隐藏, 遵循所谓的就近原则. 在Java中,在内层定义与外层同名的变量是禁止的! 如下: int i = 0; for( ...

  7. easy ui 下拉级联效果 ,下拉框绑定数据select控件

    html代码: ①两个下拉框,一个是省,另一个市 <tr> <td>省:</td> <td> <select id="ProvinceI ...

  8. iOS UIKit:CollectionView之设计 &lpar;1&rpar;

    collection view(UICollectionView对象)使用灵活和可扩展的布局来描述有序的数据项,其一般情况下以网格的形式来展示内容,但并非一定如此. 1 基础 为了将数据展示在屏幕中, ...

  9. poj2778DNA Sequence &lpar;AC自动机&plus;矩阵快速幂&rpar;

    转载请注明出处: http://www.cnblogs.com/fraud/          ——by fraud DNA Sequence Time Limit: 1000MS   Memory ...

  10. 关于 java&period;io&period;IOException&colon; open failed&colon; EACCES &lpar;Permission denied&rpar;

    今天解决了一个问题,不得不来和大家分享.就是关于 java.io.IOException: open failed: EACCES (Permission denied)的问题,网上也有很多人把这个问 ...