原版传送门 & 加强版传送门

题意:

\(T\) 组数据,求 \(\sum\limits_{i=1}^n\sum\limits_{j=1}^n(i+j)^k\mu^2(\gcd(i,j))\gcd(i,j)\)

弱化版中 \(T=1\),\(n \leq 5 \times 10^6\)

强化版中 \(T=10^4\),\(n \leq 10^7\)

推式子:

\[\sum\limits_{i=1}^n\sum\limits_{j=1}^n(i+j)^k\mu^2(\gcd(i,j))\gcd(i,j)
\]
\[\sum\limits_{d=1}^n\sum\limits_{i=1}^n\sum\limits_{j=1}^n(i+j)^k\mu^2(d)\times d[\gcd(i,j)=d]
\]
\[\sum\limits_{d=1}^n\mu^2(d)d^{k+1}\times\sum\limits_{i=1}^{\frac{n}{d}}\sum\limits_{j=1}^{\frac{n}{d}}(i+j)^k[\gcd(i,j)=1]
\]
\[\sum\limits_{d=1}^n\mu^2(d)d^{k+1}\times\sum\limits_{i=1}^{\frac{n}{d}}\sum\limits_{j=1}^{\frac{n}{d}}(i+j)^k\sum\limits_{p|\gcd(i,j)}\mu(p)
\]
\[\sum\limits_{d=1}^n\mu^2(d)d^{k+1}\times\sum\limits_{p|\gcd(i,j)}\mu(p)p^k\times\sum\limits_{i=1}^{\frac{n}{dp}}\sum\limits_{j=1}^{\frac{n}{dp}}(i+j)^k
\]

令 \(s(x)=\sum\limits_{i=1}^x\sum\limits_{j=1}^x(i+j)^k\)

\[\sum\limits_{dp \leq n}\mu^2(d)d^{k+1}\mu(p)p^ks(\frac{n}{dp})
\]
\[\sum\limits_{t=1}^ns(\frac{n}{t})\sum\limits_{d|t}\mu^2(d)d^{k+1}\mu(\frac{t}{d})(\frac{t}{d})^k
\]
\[\sum\limits_{t=1}^ns(\frac{n}{t})t^k\sum\limits_{d|t}d\mu^2(d)\mu(\frac{t}{d})
\]

令 \(f(t)=\sum\limits_{d|t}d\mu^2(d)\mu(\frac{t}{d})\)

\[\sum\limits_{t=1}^ns(\frac{n}{t})f(t)t^k
\]

预处理 \(s(x)\) 和 \(g(x)=\sum\limits_{i=1}^xf(i)i^k\),就可以使用整除分块在 \(\sqrt{n}\) 的时间内求出。

接下来我们的问题就是如何求出 \(s(x)\) 和 \(g(x)\)。

首先预处理 \(i^k\) 肯定是需要的。不过一个个快速幂会超时,不过发现 \(i^k\) 是一个积性函数,欧拉筛解决,这部分时间复杂度 \(\pi(n)\log k\)。

对于 \(s(x)\),直接求肯定不太容易,我们不妨转化为枚举 \(t \in [2,2x]\),观察 \(t^k\) 被贡献了几次。

例如 \(x=4\),\(s(4)=1 \times 2^k+2 \times 3^k+3 \times 4^k+4 \times 5^k+3 \times 6^k+2 \times 7^k+1 \times 8^k\)

观察每一项前面的系数,发现了什么。呈阶梯状分部!

预处理 \(w(x)=\sum\limits_{i=1}^xi^x \times (x-i+1)\),稍微画个图就会发现 \(s(x)=w(2x)-2w(x)\)

接下来是 \(g(x)\),要求出 \(g(x)\),肯定要先求出 \(f(x)\)。

由于 \(f(x)\) 是 \(x\mu^2(x)\) 与 \(mu(x)\) 的狄利克雷卷积,而两项都是积性函数,故 \(f(x)\) 也是积性函数。

因此可以用欧拉筛求出 \(f(x)\)。假设 \(x\) 质因数分解里面有一项 \(p^q\),我们考虑这一项对答案的贡献。

若 \(q=1\),\(1\times\mu^2(1)\times\mu(p)+p\times\mu^2(p)\times\mu(1)=p-1\)

若 \(q=2\),\(1\times\mu^2(1)\times\mu(p^2)+p\times\mu^2(p)\times\mu(p)+p^2\times\mu^2(p^2)\times\mu(1)=-p\)

若 \(q\geq 3\),那么 \(d\) 与 \(\frac{p^q}{d}\) 中必定有一项的幂 \(\geq 2\),故 \(f(p^q)=0\)。

\(s(x)\) 与 \(g(x)\) 都求出来了,本题也就迎刃而解了。

/*
Contest: -
Problem: P6222
Author: tzc_wk
Time: 2020.9.24
*/
#include <bits/stdc++.h>
using namespace std;
#define fi first
#define se second
#define pb push_back
#define fz(i,a,b) for(int i=a;i<=b;i++)
#define fd(i,a,b) for(int i=a;i>=b;i--)
#define foreach(it,v) for(__typeof(v.begin()) it=v.begin();it!=v.end();it++)
#define all(a) a.begin(),a.end()
#define fill0(a) memset(a,0,sizeof(a))
#define fill1(a) memset(a,-1,sizeof(a))
#define fillbig(a) memset(a,0x3f,sizeof(a))
#define y1 y1010101010101
#define y0 y0101010101010
#define int unsigned int
typedef pair<int,int> pii;
typedef long long ll;
inline int read(){
int x=0,neg=1;char c=getchar();
while(!isdigit(c)){
if(c=='-') neg=-1;
c=getchar();
}
while(isdigit(c)) x=x*10+c-'0',c=getchar();
return x*neg;
}
int T=read(),N=read(),k=read();
inline int qpow(int x,int e){
int ans=1;
while(e){
if(e&1) ans=ans*x;
x=x*x;e>>=1;
} return ans;
}
int pr[20000005],pcnt=0,f[20000005],p[20000005];
bool vis[20000005];
inline void prework(int n){
f[1]=p[1]=1;
for(int i=2;i<=n;i++){
if(!vis[i]){pr[++pcnt]=i;f[i]=i-1;p[i]=qpow(i,k);}
for(int j=1;j<=pcnt&&pr[j]*i<=n;j++){
p[pr[j]*i]=p[i]*p[pr[j]];vis[pr[j]*i]=1;
if(i%pr[j]) f[pr[j]*i]=f[pr[j]]*f[i];
else{
int lft=i/pr[j];
if(lft%pr[j]) f[pr[j]*i]=-pr[j]*f[lft];
else f[pr[j]*i]=0;
break;
}
}
}
fz(i,1,n) f[i]=f[i-1]+f[i]*p[i];
fz(i,1,n) p[i]+=p[i-1];
fz(i,1,n) p[i]+=p[i-1];
}
inline int sum(int x){
return (p[x<<1]-(p[x]<<1));
}
signed main(){
prework(N<<1);
while(T--){
int n=read(),ans=0;
for(int l=1,r;l<=n;l=r+1){
r=n/(n/l);
ans+=(f[r]-f[l-1])*sum(n/l);
}
cout<<ans<<endl;
}
return 0;
}

洛谷 P6222 - 「P6156 简单题」加强版(莫比乌斯反演)的更多相关文章

  1. P6222 「简单题」加强版 莫比乌斯反演 线性筛积性函数

    LINK:简单题 以前写过弱化版的 不过那个实现过于垃圾 少预处理了一个东西. 这里写一个实现比较精细了. 最后可推出式子:\(\sum_{T=1}^nsum(\frac{n}{T})\sum_{x| ...

  2. 洛谷P4240 毒瘤之神的考验 【莫比乌斯反演 + 分块打表】

    题目链接 洛谷P4240 题解 式子不难推,分块打表真的没想到 首先考虑如何拆开\(\varphi(ij)\) 考虑公式 \[\varphi(ij) = ij\prod\limits_{p | ij} ...

  3. bzoj 2005 & 洛谷 P1447 [ Noi 2010 ] 能量采集 —— 容斥 / 莫比乌斯反演

    题目:bzoj 2005 https://www.lydsy.com/JudgeOnline/problem.php?id=2005   洛谷 P1447 https://www.luogu.org/ ...

  4. 「bzoj3687: 简单题」

    题目 发现需要一个\(O(n\sum a_i )\)的做法 于是可以直接做一个背包,\(dp[i]\)表示和为\(i\)的子集是否有奇数种 \(bitset\)优化一下就好了 #include< ...

  5. 洛谷P7814 「小窝 R3」心の記憶

    题意 第一行给定两个数字\(n\) \(m\) \((m \ge n)\)分别代表给定字符串长度以及需要构造出的字符串长度 第二行给定一个长度为\(n\)的字符串 (假设原来的字符串是\(a\) 需要 ...

  6. P6222-「P6156 简单题」加强版【莫比乌斯反演】

    正题 题目链接:https://www.luogu.com.cn/problem/P6222 题目大意 给出\(k\),\(T\)组询问给出\(n\)求 \[\sum_{i=1}^n\sum_{j=1 ...

  7. Loj #528. 「LibreOJ β Round #4」求和 (莫比乌斯反演)

    题目链接:https://loj.ac/problem/528 题目:给定两个正整数N,M,你需要计算ΣΣu(gcd(i,j))^2 mod 998244353 ,其中i属于[1,N],j属于[1,M ...

  8. 洛谷 P4710 「物理」平抛运动

    洛谷 P4710 「物理」平抛运动 洛谷传送门 题目描述 小 F 回到班上,面对自己 28 / 110 的物理,感觉非常凉凉.他准备从最基础的力学学起. 如图,一个可以视为质点的小球在点 A(x_0, ...

  9. 洛谷比赛 「EZEC」 Round 4

    洛谷比赛 「EZEC」 Round 4 T1 zrmpaul Loves Array 题目描述 小 Z 有一个下标从 \(1\) 开始并且长度为 \(n\) 的序列,初始时下标为 \(i\) 位置的数 ...

随机推荐

  1. PinPoint单节点部署及客户端配置方法

    在一次做项目中,需要涉及全链路压测,为了更好定位链路中某一节点可能会出现的问题,在繁忙之余,快速部署及应用了该链路工具,分享给大家~ 话不多说,开始部署~ 一.环境配置1.1 获取需要的依赖包进入ho ...

  2. K8s容器存储接口(CSI)介绍

    Container Storage Interface是由来自Kubernetes.Mesos.Docker等社区member联合制定的一个行业标准接口规范,旨在将任意存储系统暴露给容器化应用程序. ...

  3. mybatis学习笔记(1)基本环境

    1.pom引入 <dependencies> <dependency> <groupId>org.mybatis</groupId> <artif ...

  4. AIApe问答机器人Scrum Meeting 5.3

    Scrum Meeting 6 日期:2021年5月3日 会议主要内容概述:汇报两日工作. 一.进度情况 组员 负责 两日内已完成的工作 后两日计划完成的工作 工作中遇到的困难 李明昕 后端 与前端对 ...

  5. the Agiles Scrum Meeting 8

    会议时间:2020.4.16 20:00 1.每个人的工作 今天已完成的工作 个人结对项目增量开发组:完成个人项目创建的部分功能 issues:增量组:准备评测机制,增加仓库自动创建和管理 团队项目增 ...

  6. jQuery常用验证

    1.文本框不能为为空 if ($("#RushStartTime").val() == "") { alert("请输入该产品.."); $ ...

  7. simulate_click

    #!/bin/bashlet actual_x=104+144*$[$2-1]let actual_y=945+144*$[$1-1]adb shell input tap ${actual_x} $ ...

  8. udev 使用方法

    原文地址 http://blog.163.com/againinput4@yeah/blog/static/122764271200962305339483/ 最近有在研究SD卡设备节点自动创建及挂载 ...

  9. 什么是操作系统fork()进程

    1.fork()是创建进程函数. 2.c程序一开始,就会产生 一个进程,当这个进程执行到fork()的时候,会创建一个子进程. 3.此时父进程和子进程是共存的,它们俩会一起向下执行c程序的代码. 4. ...

  10. Oracle 19c 单机

    环境 vm虚拟机 双磁盘 操作系统 Oracle Linux 7.9 操作系统安装带图形 选择中文,注意不要新建用户 关闭防火墙 selinux 配置好IP 挂载系统盘镜像 修改主机名 配置hosts ...