●BZOJ 4407 于神之怒加强版
题链:
http://www.lydsy.com/JudgeOnline/problem.php?id=4407
题解:
莫比乌斯反演
直接套路化式子
$\begin{align*}ANS&=\sum_{i=1}^{n}\sum_{j=1}^{m}gcd(i,j)^k(接下来先枚举gcd的值g,然后求出有多少对(i,j)的gcd=g) \\&=\sum_{g=1}^{min(n,m)}g^k\sum_{d=1}{\frac{n}{g}\mu(d)\lfloor \frac{n}{gd} \rfloor \lfloor \frac{m}{gd} \rfloor}\\ &=\sum_{D=gd=1}^{min(n,m)} \lfloor \frac{n}{D} \rfloor \lfloor \frac{m}{D} \rfloor \sum_{g|D} g^k \mu(\frac{D}{g})\;(令f(D)=\sum_{g|D} g^k \mu(\frac{D}{g}))\\ &=\sum_{D=1}^{min(n,m)} \lfloor \frac{n}{D} \rfloor \lfloor \frac{m}{D} \rfloor f(D) \end{align*}$
如果处理出f(D)那么就可以在$O(\sqrt N)$ 的复杂度内解决每个询问。
因为 $w(x)=x^k 和 \mu(x)$都是积性函数,
所以由狄利克雷乘积的性质可知:
$\begin{align*} f(D)&=\sum_{g|D} g^k \mu(\frac{D}{g}) \\&=\sum_{g|D} w(g) \mu(\frac{D}{g}) \end{align*}$
亦是一个积性函数。
所以直接线筛就好了。
代码:
#include<cstdio>
#include<cstring>
#include<iostream>
#define MAXN 5000050
using namespace std;
const int mod=1000000007;
int f[MAXN],k;
int Pow(int a,int b){
int ret=1; a=(a%mod+mod)%mod;
while(b){
if(b&1) ret=1ll*ret*a%mod;
b>>=1; a=1ll*a*a%mod;
}
return ret;
}
void Sieve(){
static bool np[MAXN];
static int prime[MAXN],pnt;
f[1]=1;
for(int i=2,tmp,d;i<=5000000;i++){
if(!np[i]) prime[++pnt]=i,f[i]=(Pow(i,k)-1+mod)%mod;
for(int j=1;j<=pnt&&i<=5000000/prime[j];j++){
np[i*prime[j]]=1; tmp=i; d=prime[j];
while(tmp%prime[j]==0) tmp/=prime[j],d*=prime[j];
if(tmp!=1) f[tmp*d]=1ll*f[tmp]*f[d]%mod;
else f[d]=(1ll*Pow(d,k)-Pow(d/prime[j],k)+mod)%mod;
if(i%prime[j]==0) break;
}
}
for(int i=1;i<=5000000;i++) f[i]=(1ll*f[i]+f[i-1])%mod;
}
int main(){
int Case,n,m,mini,ans;
scanf("%d%d",&Case,&k);
Sieve();
while(Case--){
scanf("%d%d",&n,&m);
mini=min(n,m); ans=0;
for(int D=1,last;D<=mini;D=last+1){
last=min(n/(n/D),m/(m/D));
ans=(1ll*ans+1ll*(n/D)*(m/D)%mod*(((1ll*f[last]-f[D-1]+mod)%mod))%mod)%mod;
}
printf("%d\n",ans);
}
return 0;
}
●BZOJ 4407 于神之怒加强版的更多相关文章
- 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 ...
- BZOJ 4407 于神之怒加强版
http://www.lydsy.com/JudgeOnline/problem.php?id=4407 题意: 给下N,M,K.求 思路: 来自:http://blog.csdn.net/ws_y ...
- bzoj 4407 于神之怒加强版——反演
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4407 \( ans = \sum\limits_{D=1}^{min(n,m)}\frac{ ...
- bzoj 4407 于神之怒加强版 —— 反演+筛积性函数
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4407 推导如这里:https://www.cnblogs.com/clrs97/p/5191 ...
- BZOJ 4407: 于神之怒加强版 [莫比乌斯反演 线性筛]
题意:提前给出\(k\),求\(\sum\limits_{i=1}^n \sum\limits_{j=1}^m gcd(i,j)^k\) 套路推♂倒 \[ \sum_{D=1}^n \sum_{d|D ...
- BZOJ.4407.于神之怒加强版(莫比乌斯反演)
题目链接 Description 求\[\sum_{i=1}^n\sum_{j=1}^m\gcd(i,j)^K\ \mod\ 10^9+7\] Solution 前面部分依旧套路. \[\begin{ ...
- bzoj 4407: 于神之怒加强版【莫比乌斯反演+线性筛】
看着就像反演,所以先推式子(默认n<m): \[ \sum_{d=1}^{n}d^k\sum_{i=1}^n\sum_{j=1}^m[gcd(i,j)==d] \] \[ =\sum_{d=1} ...
- BZOJ 4407: 于神之怒加强版 莫比乌斯反演 + 线筛积性函数
Description 给下N,M,K.求 Input 输入有多组数据,输入数据的第一行两个正整数T,K,代表有T组数据,K的意义如上所示,下面第二行到第T+1行,每行为两个正整数N,M,其意 ...
随机推荐
- C语言博客作业--数组
一.PTA实验作业 题目1.求整数序列中出现次数最多的数 1.本题PTA提交列表 2.设计思路 定义整形变量n,max,count分别表示整数个数,出现次数最大值,出现次数.定义循环变量i,j. 输入 ...
- 进程与fork()、wait()、exec函数组
进程与fork().wait().exec函数组 内容简介:本文将引入进程的基本概念:着重学习exec函数组.fork().wait()的用法:最后,我们将基于以上知识编写Linux shell作为练 ...
- Week1绪论--抽象数据类型
一.作业题目 1.构造有理数T,元素e1,e2分别被赋以分子.分母值 2.销毁有理数T 3.用e(引用类型参数)返回有理数T的分子或分母,当入参i为1时返回分子, i为2是返回分母. 4.将有理数T的 ...
- CocoaPods 基础知识--------安装 及 使用第三方库
极客学院:http://www.jikexueyuan.com/course/2665_2.html?ss=1
- 项目Beta冲刺Day4
项目进展 李明皇 今天解决的进度 因服务器端未完成登录态维护,故无法进行前后端联动. 明天安排 前后端联动调试 林翔 今天解决的进度 因上课和实验室事务未完成登录态维护 明天安排 完成登录态维护 孙敏 ...
- java JDK源码解析
Hashmap 使用java语言进行系统开发时,使用得比较多得数据结构hashmap,它以[key,value],进行数据存储,通过key可以快速找到到对应的value值,但是key,value不能是 ...
- linux下安装配置jdk(解压版)
在linux下登录oracle官网,下载解压版jdk 传送门 系统默认下载到"下载"目录中 创建要将该文件解压的文件夹: 其中 -p 参数代表递归创建文件夹(可以创建多级目录 ...
- 分布式版本控制系统Git的安装及使用
Git的安装分为客户端安装和服务端安装,鉴于我平时码代码在windows环境下,因此本文客户端安装直接在windows环境,服务端安装在linux环境下(centos). Git客户端安装 客户端下载 ...
- 你考虑清楚了吗就决定用 Bootstrap ?
近年来,在前端项目中, Bootstrap 已经成为了一个非常受欢迎的工具. Bootstrap 的确有很多优点,然而,如果你的团队中恰好有一个专职的前端工程师.那我推荐你们不要使用 Bootstra ...
- C# 文件的一些基本操作
近期程序中经常用到一些文件的操作,现在大致整理一下. 一. 获取文件或文件夹基本信息 1.获取文件信息,组成一个DataTable信息. /// <summary> /// 获取指定目录下 ...