Description

给下N,M,K.求

感觉好迷茫啊,很多变换看的一脸懵逼却又不知道去哪里学。一道题做一上午也是没谁了,,

首先按照套路反演化到最后应该是这个式子

$$ans = \sum_{d = 1}^n d^k \sum_{i = 1}^{\frac{n}{d}} \frac{n}{di} \frac{m}{di} \mu(i)$$

这样就可以$O(n)$计算

继续往下推,考虑$\frac{n}{di} \frac{m}{di}$对答案的贡献

设$T = id$

$ans = \sum_{T = 1}^n \frac{n}{T} \frac{m}{T} \sum_{d \mid T} ^ T d^k \mu(\frac{T}{d})$

后面那一坨是狄利克雷卷积的形式,显然是积性函数,可以直接筛

然后我在这里懵了一个小时,,

设$H(T) = \sum_{d \mid T} ^ T d^k \mu(\frac{T}{d})$

那么当$T = p^a$式,上面的式子中只有$\frac{T}{d} = 1$或$\frac{T}{d} = p$式,$\mu(\frac{T}{d})$才不为$0$

那么把式子展开$H(p^{a + 1}) = H(p^a) * (p^k)$

// luogu-judger-enable-o2
#include<cstdio>
#include<algorithm>
#define LL long long
using namespace std;
const int MAXN = * 1e6 + , mod = 1e9 + ;
inline int read() {
char c = getchar(); int x = , f = ;
while(c < '' || c > '') {if(c == '-') f = -; c = getchar();}
while(c >= '' && c <= '') x = x * + c - '', c = getchar();
return x * f;
}
int T, K;
int prime[MAXN], vis[MAXN], tot, mu[MAXN];
LL H[MAXN], low[MAXN];
LL fastpow(LL a, LL p) {
LL base = ;
while(p) {
if(p & ) base = (base * a) % mod;
a = (a * a) % mod; p >>= ;
}
return base;
}
void GetH(int N) {
vis[] = H[] = mu[] = low[] = ;
for(int i = ; i <= N; i++) {
if(!vis[i]) prime[++tot] = i, mu[i] = -, H[i] = (- + fastpow(i, K) + mod) % mod, low[i] = i;
for(int j = ; j <= tot && i * prime[j] <= N; j++) {
vis[i * prime[j]] = ;
if(!(i % prime[j])) {
mu[i * prime[j]] = ; low[i * prime[j]] = (low[i] * prime[j]) % mod;
if(low[i] == i)
//H[i * prime[j]] = (H[i] + fastpow((i * prime[j]), K)) % mod;
H[i * prime[j]] = H[i] * (fastpow(prime[j], K)) % mod;
else H[i * prime[j]] = H[i / low[i]] * H[prime[j] * low[i]] % mod;
break;
}
mu[i * prime[j]] = mu[i] * mu[prime[j]] % mod;
H[i * prime[j]] = H[i] * H[prime[j]] % mod;
low[i * prime[j]] = prime[j] % mod;
}
}
for(int i = ; i <= N; i++) H[i] = (H[i] + H[i - ] + mod) % mod;
}
int main() {
T = read(); K = read();
GetH();
while(T--) {
int N = read(), M = read(), last;
LL ans = ;
if(N > M) swap(N, M);
for(int T = ; T <= N; T = last + ) {
last = min(N / (N / T), M / (M / T));
ans = (ans + (1ll * (N / T) * (M / T) % mod) * (H[last] - H[T - ] + mod)) % mod;
}
printf("%lld\n", ans % mod);
}
return ;
}
/*
2 5000000
7 8
123 456
4999999 5000000
*/

BZOJ4407: 于神之怒加强版(莫比乌斯反演 线性筛)的更多相关文章

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

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

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

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

  3. BZOJ 4407: 于神之怒加强版 [莫比乌斯反演 线性筛]

    题意:提前给出\(k\),求\(\sum\limits_{i=1}^n \sum\limits_{j=1}^m gcd(i,j)^k\) 套路推♂倒 \[ \sum_{D=1}^n \sum_{d|D ...

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

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

  5. bzoj 4407 于神之怒加强版 (反演+线性筛)

    于神之怒加强版 Time Limit: 80 Sec  Memory Limit: 512 MBSubmit: 1184  Solved: 535[Submit][Status][Discuss] D ...

  6. P6222 「简单题」加强版 莫比乌斯反演 线性筛积性函数

    LINK:简单题 以前写过弱化版的 不过那个实现过于垃圾 少预处理了一个东西. 这里写一个实现比较精细了. 最后可推出式子:\(\sum_{T=1}^nsum(\frac{n}{T})\sum_{x| ...

  7. BZOJ 4407: 于神之怒加强版 莫比乌斯反演 + 线筛积性函数

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

  8. 【bzoj2693】jzptab 莫比乌斯反演+线性筛

    题目描述 输入 一个正整数T表示数据组数 接下来T行 每行两个正整数 表示N.M 输出 T行 每行一个整数 表示第i组数据的结果 样例输入 1 4 5 样例输出 122 题解 莫比乌斯反演+线性筛 由 ...

  9. 【bzoj2694】Lcm 莫比乌斯反演+线性筛

    题目描述 求$\sum\limits_{i=1}^n\sum\limits_{j=1}^m|\mu(gcd(i,j))|lcm(i,j)$,即$gcd(i,j)$不存在平方因子的$lcm(i,j)$之 ...

随机推荐

  1. 【ABP框架系列学习】N层架构(3)

    目录 0.引言 1.DDD分层 2.ABP应用构架模型 客户端应用程序(Client Applications) 表现层(Presentation Layer) 分布式服务层(Distributed ...

  2. MySQL:测试题

    一,表关系的练习测试 请创建如下表关系,并建立相关约束 一,创建表结构数据: 创建的话肯定先创建没有关联的表,老师,课程(关联老师),年级,班级(关联年级),学生(关联班级), 班级任职表 (关联老师 ...

  3. pip/pip3更换国内源

    pip/pip3更换国内源 用途:pip更换为国内源,可以大大的提高安装成功率和速度. Windows更换pip/pip3源 打开目录:%appdata% 新增pip文件夹,新建pip.ini文件 给 ...

  4. 【Vue.js】vue引入组件报错:该组件未注册?

    [Vue warn]: Unknown custom element: <QuestionnaireOption> - did you register the component cor ...

  5. Wireshark的基本使用——过滤器

    前言 网络上关于Wireshark的教程已有不少,博主就简单介绍一下Wireshark分析数据包时最重要的技巧之一的过滤器..一次性嗅探到的数据包有很多,想要高效地提取出你想要的数据包或者对某个数据包 ...

  6. wap开发中的cookie

    安卓和ios的wap开发,安卓中的cookie可以识别中文,但是ios不能识别,需要转码成通用码(UNICODE),解决办法:直接转成16进制码, escape('测试文字') 友情链接:http:/ ...

  7. python包导入细节

    包导入格式 导入模块时除了使用模块名进行导入,还可以使用目录名进行导入.例如,在sys.path路径下,有一个dir1/dir2/mod.py模块,那么在任意位置处都可以使用下面这种方式导入这个模块. ...

  8. Go基础系列:defer、panic和recover

    defer关键字 defer关键字可以让函数或语句延迟到函数语句块的最结尾时,即即将退出函数时执行,即便函数中途报错结束.即便已经panic().即便函数已经return了,也都会执行defer所推迟 ...

  9. Hive环境搭建及测试

     前提条件:已经安装好如下软件 Eclipse4.5 hadoop-2.7.3 jdk1.7.0_79 此篇文章基于上一篇文章:zookeeper高可用集群搭建 什么是Hive? 1.Hive是一个基 ...

  10. 安装LoadRunner时提示缺少vc2005_sp1_with_atl_fix_redist解决方案

    操作系统重装后,安装LoadRunner11时,会报缺少vc2005_sp1_with_atl_fix_redist错误,类似下图所示: LR自动安装失败,在网上下载此组件安装后依然提示此信息,最终解 ...