题目大意:求sum i(1->n) (sum j(1->n) (gcd(i,j)))。

对于每对(i,j)都来一次gcd很慢,但是我们知道,一个约数i在1~n范围内是n/i个数的约数。gcd也是个约数,如果能利用到这一点,不就可以同时处理很多对(i,j)了吗?

我们看看最大公约数等于i的数对(x,y)个数f[i]是多少,再让f[i]*(2*i-1)就是这个最大公因数对答案ans做出的贡献。

f[i]=公约数中含有i的个数-sum j(i->min(m,n)/i) (f[i*j])。容斥原理,如果i*j是某个数对的最大公因数,则i就不是它的最大公因数。把这样的点都抠掉,剩下的就都是关于最大公因数是i的了。

公约数含有i的个数=m/i*n/i。数对(x,y)的公约数中含有i当且仅当i既是x的约数又是y的约数。先选择约数中含有i的x,其有m/i个。这时再选择y,其有n/i个。根据乘法原理,因为是依次选择,所以两个式子相乘。

#include <cstdio>
using namespace std; #define ll long long const int MAX_N = 100010; ll Proceed(ll n)
{
ll ans = 0;
static ll f[MAX_N];
for (int i = n; i >= 1; i--)
{
f[i] = (n / i) * (n / i);
for (int j = 2; j <= n / i; j++)
f[i] -= f[i*j];
ans += i*f[i];
}
return ans;
} int main()
{
#ifdef _DEBUG
freopen("c:\\noi\\source\\input.txt", "r", stdin);
#endif
ll n;
scanf("%lld", &n);
printf("%lld\n", Proceed(n));
return 0;
}

  

最新文章

  1. Delphi常用系统函数总结
  2. Unity基于响应式编程(Reactive programming)入门
  3. 简单的抓取淘宝关键字信息、图片的Python爬虫|Python3中级玩家:淘宝天猫商品搜索爬虫自动化工具(第一篇)
  4. BZOJ-1433 假期的宿舍 最大流+基础建图
  5. ApkDec android反编译工具
  6. CentOS7修改网卡为eth0
  7. float浮动之后高度自适应失效解决方案
  8. java数据结构整理(二)
  9. 数据库DBUtils基本使用
  10. Dynamics crm2013 IFD部署后启用多组织
  11. weblogic patch log显示
  12. 附录A application.properties配置项
  13. 高可用,完全分布式Hadoop集群HDFS和MapReduce安装配置指南
  14. setAttribute和setParameter方法的区别
  15. poj2240
  16. Java集合实现类区别与联系
  17. java读取配置文件的信息
  18. MySQL5.7 的新特点
  19. C# webbrowser如何获取滚动条的位置?
  20. Wifidog初分析

热门文章

  1. Unity3D for iOS初级教程:Part 2/3
  2. 【Luogu】P2324骑士精神(IDA*)
  3. cf287D Shifting
  4. BS4(BeautifulSoup4)的使用--find_all()篇
  5. msp430项目编程55
  6. android获取手机号
  7. hdu 4849
  8. vue之组件注册
  9. Spring基于Setter函数的依赖注入(DI)
  10. Flux --&gt; Redux --&gt; Redux React 入门 基础实例使用