【BZOJ4407】于神之怒加强版
题面

题目分析
\sum\limits_{i=1}^n\sum\limits_{j=1}^mgcd(i,j)^k&=\sum\limits_{d=1}^nd^k\sum\limits_{i=1}^n\sum\limits_{j=1}^m[gcd(i,j)==d]\\
\end{split}
\]
设\(f(x)\)表示\(gcd(i,j)=x\),\(g(x)\)表示\(gcd(i,j)==kx,k\in Z\)。
g(x)&=\sum\limits_{x|d}^nf(d)\\
&=\sum\limits_{i=1}^n\sum\limits_{j=1}^m[x|gcd(i,j)]\\
&=\sum\limits_{i=1}^{\lfloor\frac n x\rfloor}\sum\limits_{j=1}^{\lfloor\frac m x\rfloor}\lfloor\frac n x\rfloor\lfloor\frac m x\rfloor\\
f(x)&=\sum\limits_{x|d}^n\mu(\frac dx)g(d)=\sum\limits_{x|d}^n\mu(\frac dx)\lfloor\frac n d\rfloor\lfloor\frac m d\rfloor
\end{split}
\]
ans&=\sum\limits_{d=1}^nd^k\cdot f(d)\\
&=\sum\limits_{d=1}^nd^k\sum\limits_{d|T}^n\mu(\frac Td)\lfloor\frac n T\rfloor\lfloor\frac m T\rfloor\\
&=\sum\limits_{T=1}^n\lfloor\frac n T\rfloor\lfloor\frac m T\rfloor\sum\limits_{d|T}\mu(\frac Td)d^k
\end{split}
\]
由于\(\mu\)和\(d^k\)均为积性函数,所以\(\sum\limits_{d|T}\mu(\frac Td)d^k\)也为积性函数,可以在线性筛中\(O(n\log n)\)预处理。
前面部分用整除分块加速。
代码实现
#include<iostream>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<cstdio>
#include<iomanip>
#include<cstdlib>
#define MAXN 0x7fffffff
typedef long long LL;
const int N=5000005,mod=1e9+7;
using namespace std;
inline int Getint(){register int x=0,f=1;register char ch=getchar();while(!isdigit(ch)){if(ch=='-')f=-1;ch=getchar();}while(isdigit(ch)){x=x*10+ch-'0';ch=getchar();}return x*f;}
int g[N],mu[N],prime[N];
bool vis[N];
LL ksm(LL x,LL k){
	LL ret=1;
	while(k){
		if(k&1)ret=ret*x%mod;
		x=x*x%mod;
		k>>=1;
	}
	return ret;
}
int low[N];
int main(){
	int T=Getint(),K=Getint();
	mu[1]=g[1]=1;
	for(int i=2;i<=5e6;i++){
		if(!vis[i]){
			prime[++prime[0]]=i,mu[i]=-1;
			low[i]=i,g[i]=ksm(i,K)-1;
		}
		for(int j=1;j<=prime[0]&&1ll*prime[j]*i<=5e6;j++){
			vis[i*prime[j]]=1;
			if(i%prime[j]==0){
				low[i*prime[j]]=low[i]*prime[j];
				if(low[i*prime[j]]==i*prime[j])
					g[i*prime[j]]=g[i]*ksm(prime[j],K)%mod;
				else
					g[i*prime[j]]=(1ll*g[low[i*prime[j]]]*g[i*prime[j]/low[i*prime[j]]])%mod;
				break;
			}
			low[i*prime[j]]=prime[j];
			g[i*prime[j]]=(1ll*g[i]*g[prime[j]])%mod;
			mu[i*prime[j]]=-mu[i];
		}
	}
	for(int i=1;i<=5e6;i++)g[i]=(g[i]+g[i-1])%mod;
	while(T--){
		int n=Getint(),m=Getint();
		if(n>m)swap(n,m);
		int ans=0;
		for(int l=1,r;l<=n;l=r+1){
			r=min(n/(n/l),m/(m/l));
			ans=(ans+1ll*(n/l)*(m/l)%mod*(g[r]-g[l-1])%mod+mod)%mod;
		}
		cout<<ans<<'\n';
	}
	return 0;
}
												
											【BZOJ4407】于神之怒加强版的更多相关文章
- [BZOJ4407]于神之怒加强版
		
BZOJ挂了... 先把程序放上来,如果A了在写题解吧. #include<cstdio> #include<algorithm> #define N 5000010 #def ...
 - BZOJ4407: 于神之怒加强版(莫比乌斯反演 线性筛)
		
Description 给下N,M,K.求 感觉好迷茫啊,很多变换看的一脸懵逼却又不知道去哪里学.一道题做一上午也是没谁了,, 首先按照套路反演化到最后应该是这个式子 $$ans = \sum_{d ...
 - BZOJ4407 于神之怒加强版 - 莫比乌斯反演
		
题解 非常裸的莫比乌斯反演. 但是反演完还需要快速计算一个积性函数(我直接用$nlogn$卷积被TLE了 推荐一个博客 我也不想再写一遍了 代码 #include<cstring> #in ...
 - 【BZOJ4407】于神之怒加强版(莫比乌斯反演)
		
[BZOJ4407]于神之怒加强版(莫比乌斯反演) 题面 BZOJ 求: \[\sum_{i=1}^n\sum_{j=1}^mgcd(i,j)^k\] 题解 根据惯用套路 把公约数提出来 \[\sum ...
 - 【BZOJ4407】于神之怒加强版 莫比乌斯反演
		
[BZOJ4407]于神之怒加强版 Description 给下N,M,K.求 Input 输入有多组数据,输入数据的第一行两个正整数T,K,代表有T组数据,K的意义如上所示,下面第二行到第T+1行, ...
 - 【BZOJ-4407】于神之怒加强版       莫比乌斯反演 + 线性筛
		
4407: 于神之怒加强版 Time Limit: 80 Sec Memory Limit: 512 MBSubmit: 241 Solved: 119[Submit][Status][Discu ...
 - 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】于神之怒加强版
		
#include<bits/stdc++.h> #define N 5000010 #define yql 1000000007 using namespace std; typedef ...
 - 【bzoj4407】于神之怒加强版  莫比乌斯反演+线性筛
		
题目描述 给下N,M,K.求 输入 输入有多组数据,输入数据的第一行两个正整数T,K,代表有T组数据,K的意义如上所示,下面第二行到第T+1行,每行为两个正整数N,M,其意义如上式所示. 输出 如题 ...
 
随机推荐
- CentOS7 相关配置
			
nginx 1.在线安装nginx yum install nginx 2.启动nginx服务 systemctl start nginx 3.防火墙设置 打开http防火墙:firewall-cmd ...
 - HTML和CSS标签命名规则
			
1.Images 存放一些网站常用的图片: 2.Css 存放一些CSS文件: 3.Flash 存放一些Flash文件: 4.PSD 存放一些PSD源文件: 5.Temp 存放所有临时图片和其它文件: ...
 - [eJOI2018]元素周期表
			
题目 \((r_1,c_1),(r_2,c_1),(r_1,c_2)\)三个格子存在就说明\((r_2,c_2)\)存在,如果我们将\(r_1,c_2,c_1,r_2\)都看成一些点的话,那么这个关系 ...
 - 【ASP.Net Core】不编译视图文件
			
原文:[ASP.Net Core]不编译视图文件 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/aqtata/article/details/818 ...
 - HTTP协议:响应消息
			
一.请求消息:客户端发送给服务器端的数据 数据格式: 1.请求行 2.请求头 3.请求空行 4.请求体 二.响应消息:服务器端发送给客户的数据 数据格式: 1.响应行: 1.组成:协议/版本 响应状态 ...
 - java oop遍历List和Map的几种方法
			
一.list的遍历 import java.util.*; public class ListTest { public static void main(String[] args) { List& ...
 - 清空资源管理器访问过FTP的账号、密码
			
修改注册表,删除HKEY_CURRENT_USER\SOFTWARE\Microsoft\FTP\Accounts下相对应的项即可,即为xxx.xxx.xxx.xxx项. 如下图所示:
 - Got permission denied while trying to connect to the Docker daemon
			
答案:https://stackoverflow.com/questions/48568172/docker-sock-permission-denied
 - PHP算法之字符串转换整数 (atoi)
			
请你来实现一个 atoi 函数,使其能将字符串转换成整数. 首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止. 当我们寻找到的第一个非空字符为正或者负号时,则将该符号与之 ...
 - sql(7)
			
EXCEPT是指在第一个集合中存在,但是不存在于第二个集合中的数据. EXCEPT 子句/运算符用于将两个 SELECT 语句结合在一起,并返回第一个 SELECT 语句的结果中那些不存在于第二个 S ...