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 - 于神之怒加强版 - 莫比乌斯反演的更多相关文章

  1. 【BZOJ-4407】于神之怒加强版 莫比乌斯反演 + 线性筛

    4407: 于神之怒加强版 Time Limit: 80 Sec  Memory Limit: 512 MBSubmit: 241  Solved: 119[Submit][Status][Discu ...

  2. BZOJ 4407 于神之怒加强版 (莫比乌斯反演 + 分块)

    4407: 于神之怒加强版 Time Limit: 80 Sec  Memory Limit: 512 MBSubmit: 1067  Solved: 494[Submit][Status][Disc ...

  3. 洛谷 P5518 - [MtOI2019]幽灵乐团 / 莫比乌斯反演基础练习题(莫比乌斯反演+整除分块)

    洛谷题面传送门 一道究极恶心的毒瘤六合一题,式子推了我满满两面 A4 纸-- 首先我们可以将式子拆成: \[ans=\prod\limits_{i=1}^A\prod\limits_{j=1}^B\p ...

  4. 洛谷P2257 YY的GCD 莫比乌斯反演

    原题链接 差不多算自己推出来的第一道题QwQ 题目大意 \(T\)组询问,每次问你\(1\leqslant x\leqslant N\),\(1\leqslant y\leqslant M\)中有多少 ...

  5. BZOJ4407 于神之怒加强版 - 莫比乌斯反演

    题解 非常裸的莫比乌斯反演. 但是反演完还需要快速计算一个积性函数(我直接用$nlogn$卷积被TLE了 推荐一个博客 我也不想再写一遍了 代码 #include<cstring> #in ...

  6. [洛谷P1390]公约数的和·莫比乌斯反演

    公约数的和 传送门 分析 这道题很显然答案为 \[Ans=\sum_{i=1}^n\sum_{j=i+1}^n (i,j)\] //其中\((i,j)\)意味\(gcd(i,j)\) 这样做起来很烦, ...

  7. 【bzoj4407】于神之怒加强版 莫比乌斯反演+线性筛

    题目描述 给下N,M,K.求 输入 输入有多组数据,输入数据的第一行两个正整数T,K,代表有T组数据,K的意义如上所示,下面第二行到第T+1行,每行为两个正整数N,M,其意义如上式所示. 输出 如题 ...

  8. 【BZOJ4407】于神之怒加强版 莫比乌斯反演

    [BZOJ4407]于神之怒加强版 Description 给下N,M,K.求 Input 输入有多组数据,输入数据的第一行两个正整数T,K,代表有T组数据,K的意义如上所示,下面第二行到第T+1行, ...

  9. 洛谷 - 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}{ ...

随机推荐

  1. Java 语法清单

      Java 语法清单 Java 语法清单翻译自 egek92 的 JavaCheatSheet,从属于笔者的 Java 入门与实践系列.时间仓促,笔者只是简单翻译了些标题与内容整理,支持原作者请前往 ...

  2. Android 开发之static引发的冤案

    前段时间在android手机系统上开发一个小东西,先介绍一下他吧: 就是当手指点击屏幕不论什么地方的时候会出现点击的特效,就是在你点击屏幕的地方会出现各种效果,比方:雪花纷飞;出现五彩的肥皂泡:鲜花盛 ...

  3. CCBPM中的消息机制,CCIM服务端安装说明

    1.改动LeeIMService.exe.config服务端配置文件: 2.client的配置就比較简单了,仅仅须要在"SercerIP"节点上写上server的IP: 3.然后要 ...

  4. EasyDarwin开源云平台接入海康威视EasyCamera摄像机之快照获取与上传

    本文转自EasyDarwin团队成员Alex的博客:http://blog.csdn.net/cai6811376 EasyCamera开源摄像机拥有获取摄像机实时快照并上传至EasyDarwin云平 ...

  5. 一起来学linux:磁盘与文件系统:

    对于文件系统来说,windows上最长用的就是FAT32和NTFS.在Linux上时候用的是Ext2.在linux中,文件权限与文件属性这两部分会被存储在不同的块,权限与权限放置到inode中,实际数 ...

  6. spring定时器的配置

    首先,新建一个java项目,下面导入需要的jar包: 这里有你需要的jar包哦. jar包下载 在src文件夹下,新建一个applicationContext.xml文件 <?xml versi ...

  7. 20170316 REUSE_alv_display_lvc 面向对象函数

    **将ALV显示数据更新进输出内表中  DATA: LR_GRID TYPE  REF TO CL_GUI_ALV_GRID.  CALL FUNCTION 'GET_GLOBALS_FROM_SLV ...

  8. 【LeetCode】Rotate List

    Given a list, rotate the list to the right by k places, where k is non-negative. For example:Given 1 ...

  9. Objective-C 学习笔记

    1. Hello, World #import <Foundation/Foundation.h> int main() {    /* my first program in Objec ...

  10. jquery带按钮的图片切换效果

    <!doctype html> <html> <head> <meta charset="gb2312"> <title> ...