题意

求\(\sum_{i=1}^{n} \sum_{j=1}^{m} lcm(i, j)^{gcd(i, j)}\)(\(n, m<=500000\))

分析

很显然要死推莫比乌斯

题解

设\(n \le m\)

\[\begin{aligned}
ans & = \sum_{i=1}^{n} \sum_{j=1}^{m} lcm(i, j)^{gcd(i, j)} \\
& = \sum_{i=1}^{n} \sum_{j=1}^{m} (\frac{ij}{gcd(i, j)})^{gcd(i, j)} \\
& = \sum_{d=1}^{n} \sum_{i=1}^{a} \sum_{j=1}^{b} \left( \frac{ijdd}{d} \right)^{d} \sum_{k|(i, j)} \mu(k)
\ \ \left( a=\left \lfloor \frac{n}{d} \right \rfloor, b=\left \lfloor \frac{m}{d} \right \rfloor \right) \\
& = \sum_{d=1}^{n} d^d \sum_{k=1}^{a} \mu(k) \sum_{k|i}^{a} i^d \sum_{k|j}^{b} j^d \\
& = \sum_{d=1}^{n} d^d \sum_{k=1}^{a} \mu(k) k^{2d} \sum_{i=1}^{\left \lfloor \frac{a}{k} \right \rfloor} i^d \sum_{j=1}^{\left \lfloor \frac{b}{k} \right \rfloor} j^d \\
& = \sum_{d=1}^{n} d^d \sum_{k=1}^{\left \lfloor \frac{n}{d} \right \rfloor} \mu(k) k^{2d} \sum_{i=1}^{\left \lfloor \frac{n}{kd} \right \rfloor} i^d \sum_{j=1}^{\left \lfloor \frac{m}{kd} \right \rfloor} j^d \\
\end{aligned}
\]

于是我们对于每一个\(d\),暴力维护一下\(\mu(k) k^{2d}\),暴力维护一下\(\displaystyle \sum_{i=1}^{\left \lfloor \frac{m}{kd} \right \rfloor} j^d\),总复杂度\(O(nlogn)\)

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int mo=1000000007, N=500005;
int mu[N], p[N], pcnt, np[N], c[N], C[N], b[N];
int ipow(int a, int b) {
int x=1;
for(; b; b>>=1, a=(ll)a*a%mo) if(b&1) x=(ll)x*a%mo;
return x;
}
void init(int n) {
mu[1]=1;
for(int i=2; i<=n; ++i) {
if(!np[i]) {
p[pcnt++]=i;
mu[i]=-1;
}
for(int j=0; j<pcnt; ++j) {
int t=p[j]*i;
if(t>n) break;
np[t]=1;
if(i%p[j]==0) {
mu[t]=0;
break;
}
mu[t]=-mu[i];
}
}
}
int main() {
int n, m, ans=0;
scanf("%d%d", &n, &m);
if(n>m) {
swap(n, m);
}
init(n);
for(int i=1; i<=m; ++i) {
c[i]=1;
}
for(int d=1; d<=n; ++d) {
int A=ipow(d, d);
int nn=n/d, mm=m/d;
for(int k=1; k<=mm; ++k) {
c[k]=(ll)c[k]*k%mo;
C[k]=C[k-1]+c[k];
if(C[k]>=mo) {
C[k]-=mo;
}
}
int temp=0;
for(int k=1; k<=nn; ++k) if(mu[k]) {
temp+=(ll)c[k]*c[k]%mo*C[nn/k]%mo*C[mm/k]%mo*mu[k];
if(temp>=mo) {
temp-=mo;
}
if(temp<0) {
temp+=mo;
}
}
ans+=(ll)A*temp%mo;
if(ans>=mo) {
ans-=mo;
}
}
printf("%d\n", ans);
return 0;
}

【BZOJ】3561: DZY Loves Math VI的更多相关文章

  1. 【BZOJ 3561】 3561: DZY Loves Math VI (莫比乌斯,均摊log)

    3561: DZY Loves Math VI Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 205  Solved: 141 Description ...

  2. 【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) ...

  3. 【BZOJ】3309: DZY Loves Math

    题意 \(T(T \le 10000)\)次询问,每次给出\(a, b(1 \le a, b \le 10^7)\),求 \[\sum_{i=1}^{a} \sum_{j=1}^{b} f((i, j ...

  4. BZOJ 3561 DZY Loves Math VI

    BZOJ 3561 DZY Loves Math VI 求\(\sum_{i=1}^{n}\sum_{j=1}^{m}\text{lcm}(i,j)^{\gcd(i,j)}\),钦定\(n\leq m ...

  5. ●BZOJ 3561 DZY Loves Math VI

    题链: http://www.lydsy.com/JudgeOnline/problem.php?id=3561 题解: 莫比乌斯反演 $$\begin{aligned}ANS&=\sum_{ ...

  6. BZOJ 3561: DZY Loves Math VI 莫比乌斯反演+复杂度分析

    推到了一个推不下去的形式,然后就不会了 ~ 看题解后傻了:我推的是对的,推不下去是因为不需要再推了. 复杂度看似很大,但其实是均摊 $O(n)$ 的,看来分析复杂度也是一个能力啊 ~ code: #i ...

  7. 【BZOJ】3542: DZY Loves March

    题意 \(m * m\)的网格,有\(n\)个点.\(t\)个询问:操作一:第\(x\)个点向四个方向移动了\(d\)个单位.操作二:询问同行同列其他点到这个点的曼哈顿距离和.强制在线.(\(n \l ...

  8. 【BZOJ3561】DZY Loves Math VI (数论)

    [BZOJ3561]DZY Loves Math VI (数论) 题面 BZOJ 题解 \[\begin{aligned} ans&=\sum_{i=1}^n\sum_{j=1}^m\sum_ ...

  9. 【BZOJ 3560】 3560: DZY Loves Math V (欧拉函数)

    3560: DZY Loves Math V Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 241  Solved: 133 Description ...

随机推荐

  1. 外景VR的应用

    留坑,续写. 最近在做外景的项目,被相关的帧率优化和灯光布置困扰的不要不要的.下面写下我是怎么优化帧率和对帧率的一些理解. 帧率,游戏的重要影响因素,会对玩家的手感以及视觉产生重大的影响,一般的游戏帧 ...

  2. Unity Development with VS Code

    https://code.visualstudio.com/Docs/runtimes/unity

  3. 快速傅里叶(FFT)的快速深度思考

    关于按时间抽取快速傅里叶(FFT)的快速理论深度思考 对于FFT基本理论参考维基百科或百度百科. 首先谈谈FFT的快速何来?大家都知道FFT是对DFT的改进变换而来,那么它究竟怎样改进,它改进的思想在 ...

  4. jQuery入门(2)使用jQuery操作元素的属性与样式

    jQuery入门(1)jQuery中万能的选择器 jQuery入门(2)使用jQuery操作元素的属性与样式 jQuery入门(3)事件与事件对象 jQuery入门(4)jQuery中的Ajax()应 ...

  5. Swift3.0P1 语法指南——方法

    原档:https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/Swift_Programmi ...

  6. C和指针 第十三章 高级指针话题

    高级声明: int (*f)(); 这里声明有两个括号,第二个括号是函数调用,第一个括号是聚组作用.(*f)是一个函数,所以f是指向返回整型的函数的指针.程序中的每个函数都位于,内存中某个位置,所以存 ...

  7. poj 1112

    昨天晚上看的题. 说实话,我一眼就看出了是二分图,再一眼就看出了是二分图+dp(01背包).但悲剧的是我一眼看出的算法是正确的,但我总以为它是错误的,浪费了很长时间像其他算法(TAT). 今天终于把代 ...

  8. PYTHON 写函数,检查传入列表的长度,如果大于2,那么仅保留前两个长度的内容,并将新内容返回给调用者

    def a2(arg): if len(arg) > 2: del arg[2:] li = [12,13,14,15] a2(li) print(li)

  9. twemproxy explore,redis和memcache代理服务器

    twemproxy,也叫nutcraker.是一个twtter开源的一个redis和memcache代理服务器. redis作为一个高效的缓存服务器,非常具有应用价值.但是当使用比较多的时候,就希望可 ...

  10. Python全栈开发【基础二】

    Python全栈开发[基础二] 本节内容: Python 运算符(算术运算.比较运算.赋值运算.逻辑运算.成员运算) 基本数据类型(数字.布尔值.字符串.列表.元组.字典) 其他(编码,range,f ...