luogu1447 能量采集
题目大意
给出m,n,对于每一个整数x∈[1,m],y∈[1,n]都有一点(x,y)。处理每个点所需要的能量为2*k+1,k为该点到原点经过的点的数量(不包括该点本身)。求处理所有点所需要的能量和。
思路
先考虑考虑暴力,即枚举每一个点,求其所需的能量。我们怎么知道一个点(x,y)的k值呢?
性质1:k=gcd(x,y)-1
既然是直线,所以我们可以想到斜率。我们规定斜率用两个互质的整数:分子和分母来表示。现在我们要求k。小学时我们是怎么化简分数的?分子分母分别除以它们的最大公因数即可。意思就是说,上述所说的分子是y/gcd(x,y),分母是x/gcd(x,y)。因为x=gcd(x, y) * (x / gcd(x, y)), y也是如此,所以对于每个整数a∈1~gcd(x,y),点(a*(x/gcd(x,y)), a*(y/gcd(x,y)))都是在原点与点(x,y)直线上的整点。抠掉当前点,因此,k=gcd(x,y)-1。
对于每个点都来一次gcd很慢,但是我们知道,一个约数i在1~n范围内是n/i个数的约数。gcd也是个约数,如果能利用到这一点,不就可以同时处理很多个点了吗?
现在我们的思路是:既然只要gcd(x,y)都相同,该点所需要的能量就相同,所以我们看看最大公约数等于i的数对(x,y)个数f[i]是多少,再让f[i]*(2*i-1)就是这个最大公因数对答案ans做出的贡献。
性质2:f[i]=公约数中含有i的个数-sum foreach j(i<j<=min(m,n)/i) (f[i*j])
容斥原理,如果i*j是某个数对的最大公因数,则i就不是它的最大公因数。把这样的点都抠掉,剩下的就都是关于最大公因数是i的了。
性质3:公约数含有i的个数=m/i*n/i
数对(x,y)的公约数中含有i当且仅当i既是x的约数又是y的约数。先选择约数中含有i的x,其有m/i个。这时再选择y,其有n/i个。根据乘法原理,因为是依次选择,所以两个式子相乘。
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std; #define ll long long
const int MAX_N = 1000010; int main()
{
ll n, m, ans = 0;
static ll f[MAX_N];
scanf("%lld%lld", &n, &m);
if (n > m)
swap(n, m);
memset(f, 0, sizeof(f));
for (ll i = n; i >= 1; i--)
{
f[i] = (n / i)*(m / i);
for (ll j = 2; j <= n / i; j++)
f[i] -= f[i*j];
ans += f[i] * (i * 2 - 1);
}
printf("%lld\n", ans);
return 0;
}
luogu1447 能量采集的更多相关文章
- luogu1447 [NOI2010]能量采集 莫比乌斯反演
link 冬令营考炸了,我这个菜鸡只好颓废数学题了 NOI2010能量采集 由题意可以写出式子: \(\sum_{i=1}^n\sum_{j=1}^m(2\gcd(i,j)-1)\) \(=2\sum ...
- [luogu1447 NOI2010] 能量采集 (容斥原理)
传送门 Description 栋栋有一块长方形的地,他在地上种了一种能量植物,这种植物可以采集太阳光的能量.在这些植物采集能量后,栋栋再使用一个能量汇集机器把这些植物采集到的能量汇集到一起. 栋栋的 ...
- BZOJ 2005: [Noi2010]能量采集
2005: [Noi2010]能量采集 Time Limit: 10 Sec Memory Limit: 552 MBSubmit: 3312 Solved: 1971[Submit][Statu ...
- noi2010 能量采集
2005: [Noi2010]能量采集 Time Limit: 10 Sec Memory Limit: 552 MB Submit: 3068 Solved: 1820 [Submit][Sta ...
- 2005: [Noi2010]能量采集 - BZOJ
Description 栋栋有一块长方形的地,他在地上种了一种能量植物,这种植物可以采集太阳光的能量.在这些植物采集能量后,栋栋再使用一个能量汇集机器把这些植物采集到的能量汇集到一起. 栋栋的植物种得 ...
- 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]能量采集
Description 栋栋有一块长方形的地,他在地上种了一种能量植物,这种植物可以采集太阳光的能量.在这些植物采集能量后,栋栋再使用一个能量汇集机器把这些植物采集到的能量汇集到一起. 栋栋的植物种得 ...
- 【BZOJ 2005】[Noi2010]能量采集 (容斥原理| 欧拉筛+ 分块)
能量采集 Description 栋栋有一块长方形的地,他在地上种了一种能量植物,这种植物可以采集太阳光的能量.在这些植物采集能量后,栋栋再使用一个能量汇集机器把这些植物采集到的能量汇集到一起. 栋栋 ...
- BZOJ 2005 能量采集
Description 栋栋有一块长方形的地,他在地上种了一种能量植物,这种植物可以采集太阳光的能量.在这些植物采集能量后,栋栋再使用一个能量汇集机器把这些植物采集到的能量汇集到一起. 栋栋的植物种得 ...
随机推荐
- dom转换成jquery对象
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/stri ...
- 在.xls;*.xlsx类型文件的导入(可以导入多条数据)
2018-11-28 17:36:35 需要jar包:poi-3.8-201203026.jar jsp页面: <LINK href="${basePath}plugins/upl ...
- Android 打开设置界面或者WiFi连接界面
1.使用APP打开系统的设置界面或者WiFi连接界面 startActivity(new Intent(Settings.ACTION_WIFI_SETTINGS)); //直接进入手机中的wifi网 ...
- github添加公钥出现 github ssh key Key is invalid. Ensure you've copied the file correctly的解决办法
因为在公钥查看的时候可能是利用了vim明明查看,所以会有换行,导致这个错误,解决方法是用cat命令查看文件,或者其他方式查看,总之公钥不能有换行.
- sphinx在windows下的简单安装与使用
1.下载地址 http://sphinxsearch.com/downloads/release/,我这里下的是“Win64 binaries w/MySQL+PgSQL+libstemmer+id6 ...
- Architecture:话说科学家/工程师/设计师/商人
从使命.目的.行为的不同,可以归类人群到科学家.工程师.设计师.商人等等.使命分别是:1.携带当下社会的财富对未来探索,希望引发变革:2.掌握工程全貌.完成整个工程的圣经周期:3.在工程的设计层面做文 ...
- <aop:aspectj-autoproxy />
通过配置织入@Aspectj切面 虽然可以通过编程的方式织入切面,但是一般情况下,我们还是使用spring的配置自动完成创建代理织入切面的工作. 通过aop命名空间的<aop:aspectj-a ...
- coredata示意图
NSPersistentStoreCoordinator(Persistent Store Coordinator),缩写为PSC:存储信息+结构信息(MOM) NSManagedObjectMode ...
- day009 文件操作
文件操作 文件路径 d:\test.txt 编码方式 utf-8 gbk... 操作方式 操作方式:只读,只写,追加,读写,写读..... 以什么编码方式储存的文件,就以什么编码打开进行操作. 只读: ...
- 三种办法来安装Python3.x
Centos7默认自带了Python2.7版本,但是因为项目需要使用Python3.x你可以按照此文的三个方法进行安装. 注:本文示例安装版本为Python3.5, 一.Python源代码编译安装 安 ...