~~~题面~~~

题解:
  $$ans = \sum_{i = 1}^{n}\sum_{j = 1}^{m}{\frac{ij}{gcd(i, j)}}$$
  改成枚举d(设n < m)
  $$ans = \sum_{d = 1}^{n}\sum_{i = 1}^{n}\sum_{j = 1}^{m}[gcd(i, j) == d]\frac{ij}{d}$$
  考虑枚举$id$
  设$N = \lfloor{\frac{n}{d}}\rfloor$,$M = \lfloor{\frac{m}{d}}\rfloor$
  $$ans = \sum_{d = 1}^{n}{d}\sum_{i = 1}^{N}\sum_{j = 1}^{M}\sum_{t | gcd(i, j)}{\mu(t)ij}$$
  把后面改成枚举$\mu(t)$
  $$ans = \sum_{d = 1}^{n}d\sum_{t = 1}^{N}{\mu(t)} \sum_{i = 1}^{\lfloor{\frac{N}{t}}\rfloor}\sum_{j = 1}^{\lfloor{\frac{M}{t}}\rfloor}ijt^2$$
  $$ans = \sum_{d = 1}^{n}d\sum_{t = 1}^{N}{\mu(t)} t^2 \sum_{i = 1}^{\lfloor{\frac{N}{t}}\rfloor}\sum_{j = 1}^{\lfloor{\frac{M}{t}}\rfloor}ij$$
  $$ans = \sum_{d = 1}^{n}d\sum_{t = 1}^{N}{\mu(t)} t^2 \sum_{i = 1}^{\lfloor{\frac{N}{t}}\rfloor}i\sum_{j = 1}^{\lfloor{\frac{M}{t}}\rfloor}j$$
  因为$\sum_{i = 1}^{\lfloor{\frac{N}{t}}\rfloor}i$显然是可以$O(n)$预处理的,而$\lfloor{\frac{N}{t}}\rfloor \lfloor{\frac{M}{t}}\rfloor$可以整数分块,$t^2\mu(t)$可以线性筛$O(n)$预处理,总复杂度$O(n + n\sqrt{n})$

  不过其实还有更优的方法,以后再说吧。。。

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. #define R register int
  4. #define AC 10000010
  5. #define p 20101009
  6. #define LL long long
  7.  
  8. int n, m, N, M, tot;
  9. LL ans;
  10. int prime[AC], mu[AC];
  11. LL sum[AC], s[AC];//质数,mu函数,1~n求和,mu(t)*t^2求和
  12. bool z[AC];
  13.  
  14. void pre()
  15. {
  16. scanf("%d%d", &n, &m);
  17. mu[] = ;
  18. int b = max(n, m), x;
  19. s[] = sum[] = ;//初始化1,,,,因为下面的i是从2开始的
  20. for(R i = ; i <= b; i++)
  21. {
  22. if(!z[i]) prime[++tot] = i, mu[i] = -;
  23. s[i] = (s[i - ] + (LL)mu[i] * ((LL)i * (LL)i)%p) % p;//error !!, mu要LL
  24. sum[i] = (sum[i - ] + i) % p;
  25. for(R j = ; j <= tot; j ++)
  26. {
  27. x = prime[j];
  28. if(i * x > b) break;
  29. z[i * x] = true;
  30. if(!(i % x)) break;
  31. mu[i * x] = -mu[i];
  32. }
  33. }
  34. }
  35.  
  36. void work()
  37. {
  38. if(m < n) swap(n, m);
  39. //for(R i = 1; i <= m; i ++) printf("%lld ", sum[i]);
  40. //printf("\n");
  41. LL summ;
  42. for(R i = ; i <= n; i++)//枚举d
  43. {
  44. int pos;
  45. N = n / i, M = m / i;
  46. summ = ;
  47. for(R j = ; j <= N; j = pos + )//枚举t
  48. {
  49. pos = min(N / (N / j), M / (M / j));
  50. summ += (((s[pos] - s[j - ]) % p * sum[N / j]) % p * sum[M / j]) % p;
  51. summ %= p;
  52. }
  53. summ = (summ * i + p) % p;//error!!!别把d给忘了!
  54. ans = (ans + summ + p) % p;
  55. //printf("%lld\n", ans);
  56. }
  57. printf("%lld\n", ans);
  58. }
  59.  
  60. int main()
  61. {
  62. // freopen("in.in", "r", stdin);
  63. pre();
  64. work();
  65. // fclose(stdin);
  66. return ;
  67. }

[国家集训队]Crash的数字表格 / JZPTAB 莫比乌斯反演的更多相关文章

  1. [Luogu P1829] [国家集训队]Crash的数字表格 / JZPTAB (莫比乌斯反演)

    题面 传送门:洛咕 Solution 调到自闭,我好菜啊 为了方便讨论,以下式子\(m>=n\) 为了方便书写,以下式子中的除号均为向下取整 我们来颓柿子吧qwq 显然,题目让我们求: \(\l ...

  2. 洛谷P1829 [国家集训队]Crash的数字表格 / JZPTAB(莫比乌斯反演)

    题目背景 提示:原 P1829 半数集问题 已经迁移至 P1028 数的计算 题目描述 今天的数学课上,Crash小朋友学习了最小公倍数(Least Common Multiple).对于两个正整数a ...

  3. luoguP1829 [国家集训队]Crash的数字表格 / JZPTAB(莫比乌斯反演)

    题意 注:默认\(n\leqslant m\). 所求即为:\(\sum\limits_{i=1}^{n}\sum\limits_{j=1}^{m}lcm(i,j)\) 因为\(i*j=\gcd(i, ...

  4. P1829 [国家集训队]Crash的数字表格 / JZPTAB 莫比乌斯反演

    又一道...分数和取模次数成正比$qwq$ 求:$\sum_{i=1}^N\sum_{j=1}^Mlcm(i,j)$ 原式 $=\sum_{i=1}^N\sum_{j=1}^M\frac{i*j}{g ...

  5. 题解-[国家集训队]Crash的数字表格 / JZPTAB

    题解-[国家集训队]Crash的数字表格 / JZPTAB 前置知识: 莫比乌斯反演 </> [国家集训队]Crash的数字表格 / JZPTAB 单组测试数据,给定 \(n,m\) ,求 ...

  6. 洛谷 P1829 [国家集训队]Crash的数字表格 / JZPTAB 解题报告

    [国家集训队]Crash的数字表格 / JZPTAB 题意 求\(\sum\limits_{i=1}^n\sum\limits_{j=1}^mlcm(i,j)\),\(n,m\le 10^7\) 鉴于 ...

  7. P1829 [国家集训队]Crash的数字表格 / JZPTAB

    推式子太快乐啦!虽然我好蠢而且dummy和maomao好巨(划掉) 思路 莫比乌斯反演的题目 首先这题有\(O(\sqrt n)\)的做法但是我没写咕咕咕 然后就是爆推一波式子 \[ \sum_{i= ...

  8. 题解 P1829 【[国家集训队]Crash的数字表格 / JZPTAB】

    题目 我的第一篇莫比乌斯反演题解 兴奋兴奋兴奋 贡献一个本人自己想的思路,你从未看到过的船新思路 [分析] 显然,题目要求求的是 \(\displaystyle Ans=\sum_{i=1}^n\su ...

  9. [luogu1829][bzoj2154][国家集训队]Crash的数字表格 / JZPTAB【莫比乌斯反演】

    传送门:洛谷,bzoj 题目描述 今天的数学课上,Crash小朋友学习了最小公倍数(Least Common Multiple).对于两个正整数a和b,LCM(a, b)表示能同时整除a和b的最小正整 ...

随机推荐

  1. 一个好用的C# HttpCookieHelper.cs类

    using System; using System.Collections.Generic; using System.Text; using System.Text.RegularExpressi ...

  2. MySQL的边角料

    //1查询对应数据库所有的表 SELECT * FROM information_schema.`TABLES` WHERE TABLE_SCHEMA ="数据库名" 2 查询数据 ...

  3. C++拷贝构造函数 的理解

    #include <iostream> using namespace std; //拷贝构造函数的理解 class Point { public: Point(); Point(int ...

  4. 016---Django的ModelForm

    对于forms组件虽然可以帮我们渲染html页面,也可以做校验,但是,保存到数据库要取各字段的值,还要手动保存.所以引入了一个新的组件 这是一个神奇的组件,通过名字我们可以看出来,这个组件的功能就是把 ...

  5. JavaScript---设计模式之迭代器模式

    迭代器模式提供一种方法顺序访问一个聚合对象中各个元素,而又不需要暴露该方法中的内部表示. jQuery中我们经常会用到一个each函数就是迭代器模式 作用 为遍历不同的集合结构提供一个统一的接口,从而 ...

  6. React获取数据,假如为数组,使用map出现的问题

    在平时做项目的时候,使用到了redux, 如果获取服务器端的数据,例如返回一个  data = [1,2,3,4]data.map(item => item*2) , 这样使用的话如果数据正常获 ...

  7. Java IO学习--RandomAccessFile

    1.什么是 随机访问文件流 RandomAccessFile 这个类在很多资料上翻译成中文都是:随机访问文件,在中文里,随机是具有不确定的含义,指一会访问这里,一会访问那里的意思.如果以这种语义来解释 ...

  8. Mysql性能优化三:主从配置,读写分离

    大型网站为了软解大量的并发访问,除了在网站实现分布式负载均衡,远远不够.到了数据业务层.数据访问层,如果还是传统的数据结构,或者只是单单靠一台服务器扛,如此多的数据库连接操作,数据库必然会崩溃,数据丢 ...

  9. (转)Unreal Networking Guide Created by Zach Metcalf

        2. 3.                                                        

  10. KVM WEB管理工具——WebVirtMgr(二)日常配置

    配置宿主机 1.登录WebVirtMgr管理平台 2.添加宿主机 选择首页的WebVirtMgr -->Addd Connection 选择“SSH链接“,设置Label,IP,用户 注意:La ...