【bzoj】P4407于神之怒加强版(莫比乌斯反演)
套路一般的枚举$gcd(i,j)=w$。设$min(n,m)=top$,则有
$\sum\limits_{i=1}^{n}\sum\limits_{j=1}{m}gcd(i,j)$
$=\sum\limits_{w=1}^{top}w^{k}\sum\limits_{w|i}^{n}\sum\limits_{w|j,(i,j)=w}^{m}1$
我们设$f(w)=\sum\limits_{w|i}^{n}\sum\limits_{w|j,(i,j)=w}^{m}1$
$F(w)=\sum\limits_{w|i}^{n}\sum\limits_{w|j}^{m}1$
则有$F(w)=\sum\limits_{w|d}f(d)$
然后就根据莫比乌斯反演公式
$f(w)=\sum\limits_{w|d}\mu(\frac{d}{w})F(w)$
然后容易想到$F(w)=\frac{n}{w}\frac{m}{w}$
然后就有了原式
$=\sum\limits_{w=1}^{top}w^{k}\sum\limits_{d=1}^{\frac{top}{w}}\mu(d)\frac{n}{wd}\frac{m}{wd}$
然后……Timelimitexceed,我就看题解了。
枚举t=wd。然后数论分块乱搞。
讲道理我如果抗住题解的诱惑自己推的话还是可以推出来的qwq。
#include<cstdio>
#include<cctype>
#include<algorithm>
#include<cstring>
#include<cstdlib>
#define maxn 6000010
#define mod 1000000007
using namespace std;
inline long long read(){
long long num=,f=;
char ch=getchar();
while(!isdigit(ch)){
if(ch=='-') f=-;
ch=getchar();
}
while(isdigit(ch)){
num=num*+ch-'';
ch=getchar();
}
return num*f;
} int miu[maxn];
bool s[maxn];
int prime[],tot;
long long mul[maxn];
long long sum[maxn]; long long Pow(long long n,int i,long long p){
long long ret=;
while(i){
if(i&) ret=(ret*n)%p;
n=(n*n)%p;
i>>=;
}
return ret;
} int main(){
int T=read(),L=read();
miu[]=mul[]=sum[]=;
for(int i=;i<maxn;++i){
if(!s[i]){
prime[++tot]=i;
mul[tot]=Pow(i,L,mod);
sum[i]=mul[tot]-;
}
for(int j=;j<=tot&&1LL*i*prime[j]<=maxn;++j){
s[i*prime[j]]=;
if(i%prime[j]) sum[i*prime[j]]=(1ll*sum[i]*sum[prime[j]])%mod;
else{
sum[i*prime[j]]=(1ll*sum[i]*mul[j])%mod;
break;
}
}
}
for(int i=;i<maxn;++i){
sum[i]+=sum[i-];
sum[i]%=mod;
}
while(T--){
int n=read(),m=read();
int top=min(n,m);
int x=; long long ans=;
if(n>m) swap(n,m);
while(x<=top){
int y=min(n/(n/x),m/(m/x));
ans+=1ll*(n/x)*(m/x)%mod*(sum[y]-sum[x-])%mod;
ans%=mod;
x=y+;
}
printf("%lld\n",(ans+mod)%mod);
}
return ;
} /*
1 2
3 3
*/
【bzoj】P4407于神之怒加强版(莫比乌斯反演)的更多相关文章
- BZOJ 4407 于神之怒加强版 (莫比乌斯反演 + 分块)
4407: 于神之怒加强版 Time Limit: 80 Sec Memory Limit: 512 MBSubmit: 1067 Solved: 494[Submit][Status][Disc ...
- 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: 于神之怒加强版 莫比乌斯反演 + 线筛积性函数
Description 给下N,M,K.求 Input 输入有多组数据,输入数据的第一行两个正整数T,K,代表有T组数据,K的意义如上所示,下面第二行到第T+1行,每行为两个正整数N,M,其意 ...
- 【BZOJ-4407】于神之怒加强版 莫比乌斯反演 + 线性筛
4407: 于神之怒加强版 Time Limit: 80 Sec Memory Limit: 512 MBSubmit: 241 Solved: 119[Submit][Status][Discu ...
- BZOJ4407 于神之怒加强版 - 莫比乌斯反演
题解 非常裸的莫比乌斯反演. 但是反演完还需要快速计算一个积性函数(我直接用$nlogn$卷积被TLE了 推荐一个博客 我也不想再写一遍了 代码 #include<cstring> #in ...
- bzoj 4407 于神之怒加强版 (反演+线性筛)
于神之怒加强版 Time Limit: 80 Sec Memory Limit: 512 MBSubmit: 1184 Solved: 535[Submit][Status][Discuss] D ...
- 【bzoj4407】于神之怒加强版 莫比乌斯反演+线性筛
题目描述 给下N,M,K.求 输入 输入有多组数据,输入数据的第一行两个正整数T,K,代表有T组数据,K的意义如上所示,下面第二行到第T+1行,每行为两个正整数N,M,其意义如上式所示. 输出 如题 ...
- 【BZOJ4407】于神之怒加强版 莫比乌斯反演
[BZOJ4407]于神之怒加强版 Description 给下N,M,K.求 Input 输入有多组数据,输入数据的第一行两个正整数T,K,代表有T组数据,K的意义如上所示,下面第二行到第T+1行, ...
- 洛谷 - P4449 - 于神之怒加强版 - 莫比乌斯反演
https://www.luogu.org/problemnew/show/P4449 \(F(n)=\sum\limits_{i=1}^{n}\sum\limits_{i=1}^{m} gcd(i, ...
随机推荐
- AHK进阶之路
本文摘自 http://www.cnblogs.com/echorep/p/4911117.html 小鸟学AHK(1)之运行程序或打开文档 AHK就是AutoHotKey,是一款免费的.Wind ...
- 使用脚本在Linux服务器上自动安装Kubernetes的包管理器Helm
Helm之于Kubernetes好比yum之于Red Hat Enterprise Linux,或者apt-get之于Ubuntu. Helm是由helm CLI和Tiller组成,是典型的Clien ...
- 设置DataGridView单元格的文本对齐方式
实现效果: 知识运用: DataGridViewCellStyle类的Alignment属性 //获取或设置DataGridView单元格内的单元格内容的位置 public DataGridV ...
- Spark集锦
1 Spark官网 http://spark.apache.org/ 2 Spark书籍 http://down.51cto.com/tag-spark%E4%B9%A6%E7%B1%8D.html
- SC || Chapter7 健壮性和正确性
finally中语句不论有无异常都执行 若子类重写了父类方法,父类方法没有抛出异常,子类应自己处理全部异常而不再传播:子类从父类继承的方法不能增加或更改异常 判断checked和unchecked: ...
- fiddler 模拟发送post请求
打开fiddler,选择在右边的Composer工具栏,打开Parsed选项,然后数据发送协议,例如选择POST, POST右边输入框可以输入访问地址, 下方的输入框可以输入发送的输入操作,例如发送的 ...
- 原型与原型继承demo
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 洛谷P2347 砝码称重
题目 貌似是某年提高组签到题,六重循环零压力AC,差点怒踩std 但本蒟蒻决定写正解——多重背包,果断20分 原因是写错了状态转移方程...神才知道我咋过的样例和两个测试点 扯远了 多重背包 简单说一 ...
- 01、Linux介绍
一. Linux介绍 Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户.多任务.支持多线程和多CPU的操作系统.它能运行主要的UNIX工具软件.应用程序和 ...
- Vim编辑器基础
Vim编辑器基础 vi:Visual Interface vim:VI iMproved Vim模式 1.编辑模式(命令模式) 只能下达命令,不能键入字符 2.输入模式 键入字符 3.末行模式 左下角 ...