Jzptab [Bzoj 2693]
2016-06-11 14:23
267 查看
题目地址请点击——
接下来 T 行 每行两个正整数 表示 N 、M。
4 5
N,M<=10000000
ans=∑i=1n∑j=1mlcm(i,j)=∑i=1n∑j=1mijgcd(i,j)=∑d=1n1d⋅∑gcd(i,j)=d,1≤i≤n,1≤j≤mij
令 f(d)=∑gcd(i,j)=d,1≤i≤n,1≤j≤mij
F(d)=∑d|gcd(i,j),1≤i≤n,1≤j≤mij
则
F(d)=(d+2d+3d+…+⌊nd⌋d)(d+2d+3d+…+⌊md⌋d)=d2(1+⌊nd⌋)(1+⌊md⌋)⌊nd⌋⌊md⌋4
根据莫比乌斯反演,
f(d)=∑i=1⌊nd⌋μ(i)⋅(id)2(1+⌊nid⌋)(1+⌊mid⌋)⌊nid⌋⌊mid⌋4
∴ans=∑d=1nd∑i=1⌊nd⌋μ(i)⋅i2(1+⌊nid⌋)(1+⌊mid⌋)⌊nid⌋⌊mid⌋4=∑t=1nt⋅(1+⌊nt⌋)(1+⌊mt⌋)⌊nt⌋⌊mt⌋4∑i|tμ(i)⋅i
令 g(d)=∑i|tμ(i)⋅i,则 g(d) 为积性函数。
设 d 的唯一分解式为 pq11×pq22×pq33×…×pqss,
∴g(d)=∑i|tμ(i)⋅i=∏i=1sg(pqii)=∏i=1s(1−pi)
然后用线性筛就可以 O(n) 求出其值。
再求出 i⋅g(i) 的前缀和,分块即可 O(n−−√) 解决此题。
Jzptab
Description
Input
一个正整数 T 表示数据组数接下来 T 行 每行两个正整数 表示 N 、M。
Output
T 行,每行一个整数,表示第 i 组数据的结果。Sample Input
14 5
Sample Output
122Hint
T<=10000N,M<=10000000
Solution
令 n≤m,ans=∑i=1n∑j=1mlcm(i,j)=∑i=1n∑j=1mijgcd(i,j)=∑d=1n1d⋅∑gcd(i,j)=d,1≤i≤n,1≤j≤mij
令 f(d)=∑gcd(i,j)=d,1≤i≤n,1≤j≤mij
F(d)=∑d|gcd(i,j),1≤i≤n,1≤j≤mij
则
F(d)=(d+2d+3d+…+⌊nd⌋d)(d+2d+3d+…+⌊md⌋d)=d2(1+⌊nd⌋)(1+⌊md⌋)⌊nd⌋⌊md⌋4
根据莫比乌斯反演,
f(d)=∑i=1⌊nd⌋μ(i)⋅(id)2(1+⌊nid⌋)(1+⌊mid⌋)⌊nid⌋⌊mid⌋4
∴ans=∑d=1nd∑i=1⌊nd⌋μ(i)⋅i2(1+⌊nid⌋)(1+⌊mid⌋)⌊nid⌋⌊mid⌋4=∑t=1nt⋅(1+⌊nt⌋)(1+⌊mt⌋)⌊nt⌋⌊mt⌋4∑i|tμ(i)⋅i
令 g(d)=∑i|tμ(i)⋅i,则 g(d) 为积性函数。
设 d 的唯一分解式为 pq11×pq22×pq33×…×pqss,
∴g(d)=∑i|tμ(i)⋅i=∏i=1sg(pqii)=∏i=1s(1−pi)
然后用线性筛就可以 O(n) 求出其值。
再求出 i⋅g(i) 的前缀和,分块即可 O(n−−√) 解决此题。
相关文章推荐
- android通讯录之短信
- MATLAB地图工具箱学习总结(四)自定义投影
- [Java] 对象的声明与实例化
- 面向对象——this和super
- 神奇的栈帧
- Mybatis动态SQL--采用开发案例讲解
- Swift学习第十二枪----移动数据库王者Realm入门教程
- {小结}2016.6.11【初中部 NOIP提高组 】模拟赛C
- 微信接口开发之前准备工作
- LeetCode:Kth Largest Element in an Array
- 杭电-2028 Lowest Common Multiple Plus (LCM)
- labview密码保护方式及如何保护labview密码不被破解
- 蛇形矩阵与DFS定向搜索相结合
- Andorid View工作机制(3)—measure过程 下
- 主键外键练习
- Android-数据存储2(SQLite)及Android底层框架简介
- 中介者模式
- 数据库函数练习
- StringBuffer与StringBuilder有什么区别
- js 排序