题解 P4449 于神之怒加强版
这道题算是我完完整整推的第一道题,写篇题解纪念一下。
废话不多说,直接开始推式子(给新手准备,过程较详细,大佬可自行跳步),以下过程中均假设 \((n\le m)\),\([d=1]\) 类似于代码中的 (d==1) 。
\]
直接按套路提取
\]
等价于
\]
我们改变一下枚举项,枚举 \(\frac{i}{d},\frac{j}{d}\)
\]
接下来就要用到莫比乌斯函数的性质
\]
我们改成枚举 \(\frac{i}{x},\frac{j}{x}\)
\]
这个 \(dx\) 让人很不爽,我们把它换个元,令 \(T=dx\)
\]
把无关项往前提一提
\]
整理好后我们会发现这个式子太友善了,后面一部分
\]
完全就是 \(id_k*\mu\) ( \(*\) 为 \(Dirichlet\) 卷积),所以我们可以知道 \(f(T)=id_k*\mu\) 是一个积性函数。
所以我们只需要研究 \(T|p^x\kern 0.4emx\in N_+ \kern 0.4emp\in prime\)
而由于 \(\mu\) 的性质,(当 \(x=1\) 时)
\begin{aligned}
-1\kern 1.0em(d=1)\\
T^k\kern 1.0em(d=T)\\
\end{aligned}
\right.
\]
所以 \(f(T)=T^k-1\)
当 \(x>1\) 时,有
\begin{array}{lcl}
-(T^{x-1})^k\kern 1.0em(d=T^{x-1})\\
(T^x)^k\kern 2.7em(d=T^x)\\
\end{array}
\right.
\]
所以我们线性筛时
\begin{array}{lcl}
f_i×f_{prime_j}\kern 1.0em gcd(prime_j,i)=1\\
f_i×prime_j^k\kern 1.0em (prime_j|i)
\end{array}
\right.
\]
这样我们就可以愉快的线性筛了,而由于那个快被我们遗忘的前半部分用数论分块,所以总体复杂度为 \(O(n+(\text{素数个数})×logk+T×\sqrt{n})\)
\(AC\kern 0.4em CODE:\)
#include<bits/stdc++.h>
#define ri register int
#define p(i) ++i
using namespace std;
const int MOD=1e9+7,N=5e6+7;
inline int read() {
int x=0,f=1;char ch=getchar();
while(ch<'0'||ch>'9'){if (ch=='-') f=-1;ch=getchar();}
while(ch>='0'&&ch<='9'){x=(x<<1)+(x<<3)+(ch^48);ch=getchar();}
return x*f;
}
int prime[N],vis[N],f[N],cm[N],k;
inline int fpow(int x,int y) {
int res=1;
while(y) {
if (y&1) res=1ll*res*x%MOD;
x=1ll*x*x%MOD;y>>=1;
}
return res;
}
void getmju(int n) {
int tot=0;f[1]=1;
for (ri i(2);i<=n;p(i)) {
if (!vis[i]) prime[p(tot)]=i,cm[tot]=fpow(i,k),f[i]=1ll*(cm[tot]-1+MOD)%MOD;
for (ri j(1);j<=tot&&prime[j]*i<=n;p(j)) {
vis[prime[j]*i]=1;
if (!(i%prime[j])) {
f[i*prime[j]]=1ll*cm[j]*f[i]%MOD;
break;
}
f[i*prime[j]]=1ll*f[i]*f[prime[j]]%MOD;
}
}
for (ri i(2);i<=n;p(i)) f[i]=(f[i]+f[i-1])%MOD;
}
int n[2020],m[2020],mxn;
int main() {
//freopen("rr.out","w",stdout);
int T=read();k=read();
for (ri i(1);i<=T;p(i)) n[i]=read(),m[i]=read(),mxn=max(mxn,min(n[i],m[i]));//小小的优化一下
getmju(mxn);
for (ri i(1);i<=T;p(i)) {
int nn=n[i],mm=m[i];
if (nn>mm) swap(nn,mm);
int ans=0;
for (ri l(1),r;l<=nn;l=r+1) {
r=min(nn/(nn/l),mm/(mm/l));
ans=(ans+1ll*((f[r]-f[l-1]+MOD)%MOD)*(nn/l)%MOD*(mm/l)%MOD)%MOD;
}
printf("%d\n",ans);
}
return 0;
}
题解 P4449 于神之怒加强版的更多相关文章
- P4449 于神之怒加强版 (莫比乌斯反演)
[题目链接] https://www.luogu.org/problemnew/show/P4449 给定n,m,k,计算 \(\sum_{i=1}^n \sum_{j=1}^m \mathrm{gc ...
- P4449 于神之怒加强版
\(\color{#0066ff}{ 题目描述 }\) 给定n,m,k,计算 \(\sum_{i=1}^n \sum_{j=1}^m \mathrm{gcd}(i,j)^k\) 对1000000007 ...
- 洛谷 - P4449 - 于神之怒加强版 - 莫比乌斯反演
https://www.luogu.org/problemnew/show/P4449 \(F(n)=\sum\limits_{i=1}^{n}\sum\limits_{i=1}^{m} gcd(i, ...
- 并不对劲的p4449于神之怒加强版
题目大意 给定\(t,k(t\leq2000,k\leq5*10^6)\) \(t\)组询问,每组给出\(n,m(n,m\leq5*10^6)\)求$\sum_{i=1}^n \sum_{j=1}^m ...
- 【BZOJ-4407】于神之怒加强版 莫比乌斯反演 + 线性筛
4407: 于神之怒加强版 Time Limit: 80 Sec Memory Limit: 512 MBSubmit: 241 Solved: 119[Submit][Status][Discu ...
- 【BZOJ4407】于神之怒加强版(莫比乌斯反演)
[BZOJ4407]于神之怒加强版(莫比乌斯反演) 题面 BZOJ 求: \[\sum_{i=1}^n\sum_{j=1}^mgcd(i,j)^k\] 题解 根据惯用套路 把公约数提出来 \[\sum ...
- BZOJ 4407 于神之怒加强版 (莫比乌斯反演 + 分块)
4407: 于神之怒加强版 Time Limit: 80 Sec Memory Limit: 512 MBSubmit: 1067 Solved: 494[Submit][Status][Disc ...
- bzoj 4407 于神之怒加强版 (反演+线性筛)
于神之怒加强版 Time Limit: 80 Sec Memory Limit: 512 MBSubmit: 1184 Solved: 535[Submit][Status][Discuss] D ...
- 【BZOJ4407】于神之怒加强版 莫比乌斯反演
[BZOJ4407]于神之怒加强版 Description 给下N,M,K.求 Input 输入有多组数据,输入数据的第一行两个正整数T,K,代表有T组数据,K的意义如上所示,下面第二行到第T+1行, ...
随机推荐
- U149791 正多边形变换
原博客网页--洛谷博客 题目地址 如果您对群论有所了解,那么本题就是对二面体群 \(D_{2n}\) 的简单实现,您可以直接跳到代码部分.下面的解题思路只是对二面体群 \(D_{2n}\) 的构造思路 ...
- 前端009-vue框架
vue-admin-element https://panjiachen.github.io/vue-element-admin-site/zh/ 基于vue的生态做的很好,提供的很多的文档,中文.并 ...
- 5000字2021最新Python基础知识第一阶段:数据类型
1 编程规范 注释 python注释也有自己的规范,在文章中会介绍到.注释可以起到一个备注的作用,团队合作的时候,个人编写的代码经常会被多人调用,为了让别人能更容易理解代码的通途,使用注释是非常有效的 ...
- passwd 简单记录
passwd [选项] 登录名 -e,--expire 强制用户密码过期 这时候需要使用root账户给tel用户重新设置密码 -l,--lock 锁定指定用户密码 -u, --unlock 给指定账户 ...
- Java基础00-IO流27
1. File 1.1 File类概述和构造方法 File的构造方法:这三个构造方法可以做同样的事情 代码示例: public class File1 { public static void mai ...
- Kubernetes部署-二进制方式
环境配置 一.系统环境 序号 用途 系统 Docker版本 IP地址 1 Master CentOS Linux release 7.6.1810 (Core) 19.03.4 192.168.0.1 ...
- 【LeetCode】61. 旋转链表
61. 旋转链表 知识点:链表: 题目描述 给你一个链表的头节点 head ,旋转链表,将链表每个节点向右移动 k 个位置. 示例 输入:head = [1,2,3,4,5], k = 2 输出:[4 ...
- git的一些常用基础命令
一些常用的git命令操作简单总结 记录常用的git命令,附带命令的简单使用说明 git区域分布 remote远程仓库 repository本地仓库 index暂存区 workspace工作区 stas ...
- 40.qt quick- 高仿微信实现局域网聊天V4版本(支持gif动图表情包、消息聊天、拖动缩放窗口)
在上章37.qt quick- 高仿微信实现局域网聊天V3版本(添加登录界面.UDP校验登录.皮肤更换.3D旋转),我们已经实现了: 添加登录界面. UDP校验登录. 皮肤更换. 3D旋转(主界面和登 ...
- 【洛谷P1795 无穷的序列_NOI导刊2010提高(05)】模拟
分析 map搞一下 AC代码 #include <bits/stdc++.h> using namespace std; map<int,int> mp; inline int ...