洛谷 - P4449 - 于神之怒加强版 - 莫比乌斯反演
https://www.luogu.org/problemnew/show/P4449
\(F(n)=\sum\limits_{i=1}^{n}\sum\limits_{i=1}^{m} gcd(i,j)^k\)
首先加方括号,枚举g,提g:(\(min\)表示\(min(n,m)\))
\(\sum\limits_{g=1}^{min} g^k \sum\limits_{i=1}^{n} \sum\limits_{i=1}^{m} [gcd(i,j)==g]\)
\(\sum\limits_{g=1}^{min} g^k \sum\limits_{i=1}^{\lfloor\frac{n}{g}\rfloor} \sum\limits_{i=1}^{\lfloor\frac{m}{g}\rfloor} [gcd(i,j)==1]\)
后面莫比乌斯反演:(k被你用了真恶心)
\(\sum\limits_{g=1}^{min} g^k \sum\limits_{x=1}^{min} \mu(x){\lfloor\frac{n}{gx}\rfloor} {\lfloor\frac{m}{gx}\rfloor}\)
众所周知,这种情况要枚举\(T=gx\):
\(\sum\limits_{T=1}^{min}\sum\limits_{g|T} g^k \mu(\frac{T}{g}) {\lfloor\frac{n}{T}\rfloor} {\lfloor\frac{m}{T}\rfloor}\)
提T:
\(\sum\limits_{T=1}^{min} {\lfloor\frac{n}{T}\rfloor} {\lfloor\frac{m}{T}\rfloor} \sum\limits_{g|T} g^k \mu(\frac{T}{g})\)
所以:
\(F(n)=\sum\limits_{i=1}^{n}\sum\limits_{i=1}^{m} gcd(i,j)^k = \sum\limits_{T=1}^{min} {\lfloor\frac{n}{T}\rfloor} {\lfloor\frac{m}{T}\rfloor} \sum\limits_{g|T} g^k \mu(\frac{T}{g})\)
\(n,m\)这么小那我给你搞个线性筛吧。记 \(G(n)=\sum\limits_{g|n} g^k \mu(\frac{n}{g})\) ,这个可以 \(O(nlogn)\) 筛出来。但是我偏偏要线性筛。
每次回答一个分块了事了。
小心取模,靠。
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
inline int read() {
int x=0;
char c=getchar();
while(c<'0'||c>'9')
c=getchar();
do {
x=(x<<3)+(x<<1)+c-'0';
c=getchar();
} while(c>='0'&&c<='9');
return x;
}
inline void write(ll x) {
if(x>9) {
write(x/10);
}
putchar(x%10+'0');
return;
}
const int MAXN=5e6;
const int MOD=1e9+7;
int pri[MAXN+1];
int &pritop=pri[0];
ll G[MAXN+1];
int pk[MAXN+1];
int k;
inline ll qpow(ll x,int n) {
ll res=1;
while(n) {
if(n&1) {
res*=x;
if(res>=MOD)
res%=MOD;
}
x*=x;
if(x>=MOD)
x%=MOD;
n>>=1;
}
return res;
}
void sieve(int n=MAXN) {
pk[1]=1;
G[1]=1;
for(int i=2; i<=n; i++) {
if(!pri[i]) {
pri[++pritop]=i;
pk[i]=i;
G[i]=qpow(i,k)-1ll;
if(G[i]<0)
G[i]+=MOD;
}
for(int j=1; j<=pritop; j++) {
int &p=pri[j];
int t=i*p;
if(t>n)
break;
pri[t]=1;
if(i%p) {
pk[t]=pk[p];
//积性函数
G[t]=G[i]*G[p];
if(G[t]>=MOD)
G[t]%=MOD;
} else {
pk[t]=pk[i]*p;
if(pk[t]==t) {
//t是质数的幂次
G[t]=qpow(p,k)*G[i];
if(G[t]>=MOD)
G[t]%=MOD;
} else {
//积性函数
G[t]=G[pk[t]]*G[t/pk[t]];
if(G[t]>=MOD)
G[t]%=MOD;
}
break;
}
}
}
for(int i=1;i<=n;i++){
G[i]+=G[i-1];
if(G[i]>=MOD)
G[i]-=MOD;
}
}
inline ll ans(int n,int m) {
ll res=0;
int N=min(n,m);
for(int l=1,r;l<=N;l=r+1){
r=min(n/(n/l),m/(m/l));
ll tmp1=1ll*(n/l)*(m/l);
if(tmp1>=MOD)
tmp1%=MOD;
ll tmp2=G[r]-G[l-1];
if(tmp2<0)
tmp2+=MOD;
tmp1*=tmp2;
if(tmp1>=MOD)
tmp1%=MOD;
res+=tmp1;
if(res>=MOD)
res%=MOD;
}
return res;
}
inline void solve() {
int t=read();
k=read();
sieve();
while(t--) {
int n=read(),m=read();
write(ans(n,m));
putchar('\n');
}
}
int main() {
#ifdef Yinku
freopen("Yinku.in","r",stdin);
#endif // Yinku
solve();
return 0;
}
洛谷 - P4449 - 于神之怒加强版 - 莫比乌斯反演的更多相关文章
- 【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 ...
- 洛谷 P5518 - [MtOI2019]幽灵乐团 / 莫比乌斯反演基础练习题(莫比乌斯反演+整除分块)
洛谷题面传送门 一道究极恶心的毒瘤六合一题,式子推了我满满两面 A4 纸-- 首先我们可以将式子拆成: \[ans=\prod\limits_{i=1}^A\prod\limits_{j=1}^B\p ...
- 洛谷P2257 YY的GCD 莫比乌斯反演
原题链接 差不多算自己推出来的第一道题QwQ 题目大意 \(T\)组询问,每次问你\(1\leqslant x\leqslant N\),\(1\leqslant y\leqslant M\)中有多少 ...
- BZOJ4407 于神之怒加强版 - 莫比乌斯反演
题解 非常裸的莫比乌斯反演. 但是反演完还需要快速计算一个积性函数(我直接用$nlogn$卷积被TLE了 推荐一个博客 我也不想再写一遍了 代码 #include<cstring> #in ...
- [洛谷P1390]公约数的和·莫比乌斯反演
公约数的和 传送门 分析 这道题很显然答案为 \[Ans=\sum_{i=1}^n\sum_{j=i+1}^n (i,j)\] //其中\((i,j)\)意味\(gcd(i,j)\) 这样做起来很烦, ...
- 【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行, ...
- 洛谷 - SP3871 GCDEX - GCD Extreme - 莫比乌斯反演
易得 $\sum\limits_{g=1}^{n} g \sum\limits_{k=1}^{n} \mu(k) \lfloor\frac{n}{gk}\rfloor \lfloor\frac{n}{ ...
随机推荐
- cvpr2014
http://www.cvpapers.com/cvpr2014.html 吴佳俊 楼天城
- 目标跟踪之meanshift---均值漂移搞起2000过时的
基于灰度均值分布的目标跟踪! http://blog.csdn.net/wds555/article/details/24499599 但他有些有点: 1.不会受遮挡太多影响 Mean Shift跟踪 ...
- [IT新应用]如何拯救死机的苹果手机(iPhone X)
突然白天接了一个电话,苹果就死机了.这是用这个手机半年来第一次.貌似还能接电话,就是屏幕上一个白色的圆圈,一直转啊转. 后来百度了一下,找到这一篇.将重点部分摘录如下: http://www.sohu ...
- EasyDarwin手机直播转发快速显示问题之音频处理过程
前言 在我们前面一篇<EasyDarwin手机直播是如何实现的快速显示视频的方法>中,我们描述到了EasyDarwin流媒体服务器端是如何对视频H.264进行缓冲,再以最快的方式将最新的视 ...
- java object monitor
1 什么是java object monitor 每个java对象头中都有锁状态位标记.java中在使用synchronize同步的时候,肯定是涉及到某个对象的锁.因此,在考虑同步的时候,首先要想到是 ...
- Activity和ListActivity的区别
http://book.51cto.com/art/201007/212051.htm
- HBase开发
MapReduce接口 HBase提供了TableInputFormat.TableOutputFormat.TableMapper和TableReducer类来支持使用MapReduce框架处理HB ...
- iOS 打开应用与系统功能的调用
[[UIApplication sharedApplication] openURL:url]; 通过给url不同的值,可以实现调用系统自带 电话/短信/邮箱/浏览器/... 1.调用 电话pho ...
- HDU2068 RPG的错排 —— 错排
题目链接:https://vjudge.net/problem/HDU-2068 RPG的错排 Time Limit: 1000/1000 MS (Java/Others) Memory Lim ...
- [转]FPGA入门——basys2开发板的伪随机gold码的生成
本文原创,转载请注明出处:http://www.cnblogs.com/risten/p/4166169.html 1.系统原理 通过频率控制字选择相位步进,产生访问ROM的地址,进而控制DAC的输出 ...