[Noi2010]能量採集

Time Limit: 10 Sec  Memory Limit:
552 MB

Submit: 2324  Solved: 1387

[

id=2005">Submit][

id=2005">Status][Discuss]

Description

栋栋有一块长方形的地。他在地上种了一种能量植物,这样的植物能够採集太阳光的能量。在这些植物採集能量后,栋栋再使用一个能量汇集机器把这些植物採集到的能量汇集到一起。 栋栋的植物种得很整齐。一共同拥有n列,每列有m棵,植物的横竖间距都一样,因此对于每一棵植物。栋栋能够用一个坐标(x, y)来表示,当中x的范围是1至n,表示是在第x列,y的范围是1至m,表示是在第x列的第y棵。 因为能量汇集机器较大。不便移动,栋栋将它放在了一个角上,坐标正好是(0, 0)。
能量汇集机器在汇集的过程中有一定的能量损失。

假设一棵植物与能量汇集机器连接而成的线段上有k棵植物,则能量的损失为2k + 1。比如,当能量汇集机器收集坐标为(2, 4)的植物时。因为连接线段上存在一棵植物(1, 2),会产生3的能量损失。注意。假设一棵植物与能量汇集机器连接的线段上没有植物,则能量损失为1。如今要计算总的能量损失。 以下给出了一个能量採集的样例,当中n = 5,m = 4。一共同拥有20棵植物。在每棵植物上标明了能量汇集机器收集它的能量时产生的能量损失。 在这个样例中,总共产生了36的能量损失。

Input

仅包括一行,为两个整数n和m。

Output

仅包括一个整数。表示总共产生的能量损失。

Sample Input

【例子输入1】

5 4



【例子输入2】

3 4

Sample Output

【例子输出1】

36



【例子输出2】

20



【数据规模和约定】

对于10%的数据:1 ≤ n, m ≤ 10。



对于50%的数据:1 ≤ n, m ≤ 100。



对于80%的数据:1 ≤ n, m ≤ 1000;



对于90%的数据:1 ≤ n, m ≤ 10,000。



对于100%的数据:1 ≤ n, m ≤ 100,000。

题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2005

题目分析:首先不难发现点(x,y)和(0,0)点之间的植物个数为gcd(x,y)-1。因此题目要求的实际上就是Σi(1-n)Σj(1-m) [2 * (gcd(i, j) - 1) - 1]。化简一下得 2 * Σi(1-n)Σj(1-m) gcd(i, j) - n * m,如今问题就是怎样高速求Σi(1-n)Σj(1-m) gcd(i, j)。能够用莫比乌斯反演搞,只是直接nlogn的容斥就能够了,cnt[i]记录的是最大公约数为i的二元组个数,首先(n
/ i) * (m / i)是全部以i为公约数的二元组个数  那么拿cnt[i]减去全部的cnt[j](j为i的倍数),剩下的就是全部以i为最大公约数的二元组个数。注意这里枚举约数时要倒序,由于我们要用小的减大的,要保证大的已经算出来了。然后依照公式计算就可以。注意要用long long

#include <cstdio>
#include <cstring>
#include <algorithm>
#define ll long long
using namespace std;
int const MAX = 1e5 + 5;
ll cnt[MAX]; int main()
{
ll ans = 0;
memset(cnt, 0, sizeof(cnt));
ll n, m;
scanf("%lld %lld", &n, &m);
if(n < m)
swap(n, m);
for(int i = n; i >= 1; i--)
{
cnt[i] = (ll) (n / i) * (m / i);
for(int j = i * 2; j <= n; j += i)
cnt[i] -= cnt[j];
ans += i * cnt[i];
}
printf("%lld\n", 2 * ans - n * m);
}

最新文章

  1. C#如何创建泛型类T的实例
  2. 配置apache的虚拟机+软件下载
  3. 浅谈T-SQL中的子查询
  4. Different Approaches for MVCC
  5. Asp.Net MVC Filter 实现方式和作用范围控制
  6. Java中静态代码块,代码块,构造方法的理解
  7. Spring AOP 本质(4)
  8. matlab绘图方法汇总
  9. java 调用打印机 打印服务
  10. each用法的总结
  11. FreeBSD 系统的配置.
  12. kvm 动态挂载硬盘
  13. poj1988 Cube Stacking 带权并查集
  14. Chapter 4 Invitations——3
  15. 使用gitlab, jenkins搭建CI(持续集成)系统(3) -- 根据不同触发条件执行不同的构建任务
  16. 数据库入门理论知识介绍以及编译安装MySql
  17. bootstrap基础学习(四)——网格系统(列的偏移、排序、嵌套)
  18. Python入门之面向对象编程(二)python类的详解
  19. python panda库自动去重
  20. Java动态代理探讨

热门文章

  1. Java - 经常使用函数Random函数
  2. 【云快讯】之四十八《IBM和Cisco最新收购,加强Openstack易用能力》
  3. 精美viso制图(1)
  4. Python·Jupyter Notebook各种使用方法记录
  5. 在单机上安装多个oracle实例
  6. 杂项-DB:DW/DWH(数据仓库)
  7. Git不需重复输入账号和密码的方法
  8. mybatis的二级缓存的使用
  9. ubuntu 14.04开机出现错误“Error found when loading /root/.profile”解决
  10. Golden Gate 相关组件介绍: