【BZOJ】3561: DZY Loves Math VI
2024-10-01 04:13:26
题意
求\(\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}
\]
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;
}
最新文章
- [故障公告]受阿里云部分ECS服务器故障影响,目前无法上传图片与文件
- 浅谈CSS hack(浏览器兼容)
- java 运算符使表达式结果类型自动提升
- Winform button按钮设置快捷键
- 用ADMM求解大型机器学习问题
- [数据库]SQL中Group By 的常见使用方法.
- Coursera台大机器学习技法课程笔记02-Dual Support Vector Machine
- 虚拟机 linux系统如何安装vmware Tools
- auto_ptr的设计动机
- 统计计算与R语言的资料汇总(截止2016年12月)
- Note for video Machine Learning and Data Mining——Linear Model
- iOS 学习
- python下selenium测试报告整合
- [UOJ]#36. 【清华集训2014】玛里苟斯
- 解决centos7.0安装mysql后出现access defind for user@&#39;localhost&#39;的错误
- UVA1616-Caravan Robbers(二分)
- MySQL中varchar与char的区别以及varchar(50)中的50代表的涵义
- 虚拟机与Docker有何不同
- web模拟终端博客系统
- java.sql.SQLException: Error setting driver on UnpooledDataSource.Caused by: java.lang.IllegalArgumentException: Result Maps collection does not contain value for IStudentDaoMapper.Mapperdao.selectcou