题目

对于正整数n,定义f(n)为n所含质因子的最大幂指数。例如f(1960)=f(2^3 * 5^1 * 7^2)=3, f(10007)=1, f(1)=0。
给定正整数a,b,求sigma(sigma(f(gcd(i,j)))) (i=1..a, j=1..b)。

输入格式

第一行一个数T,表示询问数。
接下来T行,每行两个数a,b,表示一个询问。

输出格式

对于每一个询问,输出一行一个非负整数作为回答。

输入样例

4

7558588 9653114

6514903 4451211

7425644 1189442

6335198 4957

输出样例

35793453939901

14225956593420

4332838845846

15400094813

提示

【数据规模】

T<=10000

1<=a,b<=10^7

题解

前面的推导很套路:
\[ans = \sum\limits_{i = 1}^{n} \sum\limits_{j = 1}^{m} f[gcd(i,j)]\]
\[=\sum\limits_{d = 1}^{n} f[d] * \sum\limits_{i = 1}^{\lfloor \frac{n}{d} \rfloor} \sum\limits_{j = 1}^{\lfloor \frac{m}{d} \rfloor} [gcd(i,j) == 1]\]
\[=\sum\limits_{d = 1}^{n} f[d] * \sum\limits_{i = 1}^{\lfloor \frac{n}{d} \rfloor} \mu(i) * \lfloor \frac{n}{id} \rfloor\lfloor \frac{m}{id} \rfloor\]
\[=\sum\limits_{T = 1}^{n} \lfloor \frac{n}{T} \rfloor\lfloor \frac{m}{T} \rfloor \sum\limits_{d|T} f[d] * \mu(\frac{T}{d})\]
后面那玩意\(g(T) = \sum\limits_{d|T} f[d] * \mu(\frac{T}{d})\)如果能预处理出来,就能\(O(T\sqrt{n})\)计算了
然后我只会\(O(nlogn)\),,,,
去膜题解

要利用\(\mu(i)\)的性质
显然\(i\)有平方项就不用考虑了
所以\(T = \prod\limits_{i = 1}^{k} p_i^{a_i}\)中每个\(a_i\)最多被取掉\(1\)
设最大为\(r\)
所以\(f(d) = r\)或\(r - 1\)
我们设有\(x\)个这样的指数为\(r\),那么剩余的\(k - x\)个质因子的指数就可以任选,有\(2^{k - x}\)中选法
如果\(k \ne x\),\(2^{k - x}\)为偶数,对应\(\mu\)的正负数量相等,最后和为\(0\)
所以只有\(k = x\)时,\(g(T) \ne 0\)
否则我们假使所有的\(f(d)\)都等于\(r\),那么和依旧为\(0\),但是实际上当\(k\)个数都被选的时候\(f(d) = r - 1\),多了一个\(-1\),根据奇偶性,最后会产生\((-1)^{k + 1}\)的贡献
所以此时\(g(T) = (-1)^{k + 1}\)

具体可以先筛出\(\mu(i)\),再由\(\mu(i) \ne 0\)的\(i\)推出所有的\(f(i^x)\),这样做每个数只会被推一次,所以是\(O(n)\)的

#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
#define LL long long int
#define Redge(u) for (int k = h[u],to; k; k = ed[k].nxt)
#define REP(i,n) for (int i = 1; i <= (n); i++)
#define BUG(s,n) for (int i = 1; i <= (n); i++) cout<<s[i]<<' '; puts("");
using namespace std;
const int maxn = 10000005,maxm = 100005,N = 1e7,INF = 1000000000;
inline int read(){int out = 0,flag = 1; char c = getchar();while (c < 48 || c > 57){if (c == '-') flag = -1; c = getchar();}while (c >= 48 && c <= 57){out = (out << 3) + (out << 1) + c - 48; c = getchar();}return out * flag;
}
int p[maxn],pi,isn[maxn],mu[maxn];
LL g[maxn];
void init(){mu[1] = 1;for (int i = 2; i <= N; i++){if (!isn[i]) p[++pi] = i,mu[i] = -1;for (int j = 1; j <= pi && i * p[j] <= N; j++){isn[i * p[j]] = true;if (i % p[j] == 0){mu[i * p[j]] = 0;break;}mu[i * p[j]] = -mu[i];}}for (LL i = 2; i <= N; i++)if (mu[i] != 0){for (LL j = i,t = -mu[i]; j <= N; j *= i)g[j] = t;}for (int i = 1; i <= N; i++) g[i] += g[i - 1];
}
int main(){init();int T = read(),n,m;LL ans;while (T--){n = read(); m = read(); ans = 0;if (n > m) swap(n,m);for (int i = 1,nxt; i <= n; i = nxt + 1){nxt = min(n / (n / i),m / (m / i));ans += 1ll * (n / i) * (m / i) * (g[nxt] - g[i - 1]);}printf("%lld\n",ans);}return 0;
}

转载于:https://www.cnblogs.com/Mychael/p/8974560.html

BZOJ3309 DZY Loves Math 【莫比乌斯反演】相关推荐

  1. 【bzoj3309】DZY Loves Math 莫比乌斯反演+线性筛

    Description 对于正整数n,定义f(n)为n所含质因子的最大幂指数.例如f(1960)=f(2^3 * 5^1 * 7^2)=3, f(10007)=1, f(1)=0. 给定正整数a,b, ...

  2. BZOJ3309 DZY Loves Math(莫比乌斯反演+线性筛)

    一通正常的莫比乌斯反演后,我们只需要求出g(n)=Σf(d)*μ(n/d)的前缀和就好了. 考虑怎么求g(n).当然是打表啊.设n=∏piai,n/d=∏pibi .显然若存在bi>1则这个d没 ...

  3. bzoj3309: DZY Loves Math

    这显然要用莫比乌斯反演: Ans=∑ai=1∑bj=1f(gcd(i,j))=∑df(d)∑⌊ad⌋i=1∑⌊bd⌋j=1[gcd(i,j)=1]=∑df(d)∑⌊ad⌋i=1∑⌊bd⌋j=1∑p|T ...

  4. DZY Loves Math系列

    link 好久没写数学题了,再这样下去吃枣药丸啊. 找一套应该还比较有意思的数学题来做. [bzoj3309]DZY Loves Math 简单推一下. \[\sum_{i=1}^n\sum_{j=1 ...

  5. 【BZOJ3309】DZY Loves Math

    3309: DZY Loves Math Time Limit: 20 Sec Memory Limit: 512 MB Submit: 411 Solved: 161 [Submit][Status ...

  6. 【BZOJ3309】DZY Loves Math 解题报告

    [BZOJ3309]DZY Loves Math Description 对于正整数\(n\),定义\(f(n)\)为\(n\)所含质因子的最大幂指数.例如\(f(1960)=f(2^3×5^1×7^ ...

  7. BZOJ 3309 DZY Loves Math

    3309: DZY Loves Math Description 对于正整数n,定义f(n)为n所含质因子的最大幂指数.例如f(1960)=f(2^3 * 5^1 * 7^2)=3, f(10007) ...

  8. 【BZOJ3512】DZY Loves Math IV(杜教筛)

    [BZOJ3512]DZY Loves Math IV(杜教筛) https://www.cnblogs.com/cjyyb/p/10165338.html

  9. bzoj 3739 DZY loves math VIII

    3739: DZY loves math VIII Time Limit: 25 Sec Memory Limit: 512 MB Submit: 318 Solved: 50 [Submit][St ...

  10. BZOJ3560 DZY Loves Math V

    原题链接:https://www.lydsy.com/JudgeOnline/problem.php?id=3560 DZY Loves Math V Description 给定n个正整数a1,a2 ...

最新文章

  1. Python爬取天气信息并定时发送给微信好友(异地恋神器)!!
  2. FCKeditor2.3 For PHP 详细整理的使用参考
  3. JAVA开发需求分析套路_JAVA并发工具常用设计套路示例代码
  4. Java 批量插入数据到数据库(MySQL)中
  5. Java架构师除了必备的技术之外,这些技能也需必备?你们觉得呢?
  6. 人工智能 - paddlepaddle飞桨 - 深度学习基础教程 - 情感分析
  7. burst什么意思_为什么Windows/iOS操作很流畅而Linux/Android却很卡顿呢?
  8. Block实现iOS回调
  9. Gitbook/Markdown中插入复杂(合并单元格)的表格
  10. CMake 简单入门
  11. 使用脚本下载.ts文件并合并
  12. 零基础搭建双端影视盒子——一、搭建运行环境
  13. HATEOAS(Hypermedia as the engine of appliation state)是什么?
  14. 电费我来降!5G用电支持十大地方标杆政策梳理
  15. 逆水寒 各个服务器位置,逆水寒合服公告_哪些服务器要合并_3DM网游
  16. 小米手机TCP连接一些奇怪现象
  17. 多测师肖sir_高级金牌讲师_项目数据
  18. 高分子材料老化的内外因、性能评价与预防措施
  19. onedrive教育版登录不上
  20. simulink他励直流电动机降电压启动仿真

热门文章

  1. 怎么让背景铺满整个页面_PPT背景太单调,教你这3种实用的技巧!
  2. mysql 命令查看sql文件大小_用SQL命令查看Mysql数据库大小
  3. css 设置input输入内缩进
  4. Kubernetes 小白学习笔记(7)--kubernetes的架构与组件-Node组件
  5. win7信息服务器,Windos2012 中的共享,win8/win10用户访问正常,WIN7用户不能访问
  6. 基于SSM的手机商城
  7. mysql查询报错2014_MySQL错误2014的原因其他未缓冲的查询处于活动状态时无法执行查询...
  8. 开发中一些常用的代码片段(持续更新,要是各位大牛看见了麻烦也给在评论区添一下常用的代码)
  9. H5 File 对象获取 Input type=file 文件详细信息
  10. Android 显式意图(Intent) 与 隐式意图