BZOJ4407: 于神之怒加强版(莫比乌斯反演 线性筛)
Description

感觉好迷茫啊,很多变换看的一脸懵逼却又不知道去哪里学。一道题做一上午也是没谁了,,
首先按照套路反演化到最后应该是这个式子
$$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: 于神之怒加强版(莫比乌斯反演 线性筛)的更多相关文章
- 【bzoj4407】于神之怒加强版 莫比乌斯反演+线性筛
题目描述 给下N,M,K.求 输入 输入有多组数据,输入数据的第一行两个正整数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 ...
- BZOJ 4407: 于神之怒加强版 [莫比乌斯反演 线性筛]
题意:提前给出\(k\),求\(\sum\limits_{i=1}^n \sum\limits_{j=1}^m gcd(i,j)^k\) 套路推♂倒 \[ \sum_{D=1}^n \sum_{d|D ...
- BZOJ4407 于神之怒加强版 - 莫比乌斯反演
题解 非常裸的莫比乌斯反演. 但是反演完还需要快速计算一个积性函数(我直接用$nlogn$卷积被TLE了 推荐一个博客 我也不想再写一遍了 代码 #include<cstring> #in ...
- bzoj 4407 于神之怒加强版 (反演+线性筛)
于神之怒加强版 Time Limit: 80 Sec Memory Limit: 512 MBSubmit: 1184 Solved: 535[Submit][Status][Discuss] D ...
- P6222 「简单题」加强版 莫比乌斯反演 线性筛积性函数
LINK:简单题 以前写过弱化版的 不过那个实现过于垃圾 少预处理了一个东西. 这里写一个实现比较精细了. 最后可推出式子:\(\sum_{T=1}^nsum(\frac{n}{T})\sum_{x| ...
- BZOJ 4407: 于神之怒加强版 莫比乌斯反演 + 线筛积性函数
Description 给下N,M,K.求 Input 输入有多组数据,输入数据的第一行两个正整数T,K,代表有T组数据,K的意义如上所示,下面第二行到第T+1行,每行为两个正整数N,M,其意 ...
- 【bzoj2693】jzptab 莫比乌斯反演+线性筛
题目描述 输入 一个正整数T表示数据组数 接下来T行 每行两个正整数 表示N.M 输出 T行 每行一个整数 表示第i组数据的结果 样例输入 1 4 5 样例输出 122 题解 莫比乌斯反演+线性筛 由 ...
- 【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)$之 ...
随机推荐
- 第80节:Java中的MVC设计模式
第80节:Java中的MVC设计模式 前言 了解java中的mvc模式.复习以及回顾! 事务,设置自动连接提交关闭. setAutoCommit(false); conn.commit(); conn ...
- numpy中的norm用法
np.linalg.norm() computes the norm of a NumPy array according to an order, ord, which specifies the ...
- 【code block】局部代码块+构造代码块+静态代码块
1.局部代码块 位置:位于类的方法中 表示方法:{} 作用:控制变量的生命周期,减少内存消耗 demo: public class LocalCode { public static void mai ...
- vue 关于图片路径的问题
在vue 中,当我们想加载assets中的图片,本人按照多年的开发经验会这样写,那是没问题的 <img src="../assets.1.jpg"/> 如果我要用v-b ...
- 正则表达式的一些探索(偏JavaScript)
简单的探索下正则表达式的相关知识,首先先了解下正则表达式的引擎和匹配过程区别,再试着掌握如何在场景中编写正则表达式,再然后探索下根据上文已知的原理和编写过程怎么去优化正则表达式,最后给出一些js里正则 ...
- leetcode — search-a-2d-matrix
/** * Source : https://oj.leetcode.com/problems/search-a-2d-matrix/ * * * Write an efficient algorit ...
- 举个栗子看如何做MySQL 内核深度优化
本文由云+社区发表 作者介绍:简怀兵,腾讯云数据库高级工程师,负责腾讯云CDB内核及基础设施建设:先后供职于Thomson Reuters和YY等公司,PTimeDB作者,曾获一项发明专利:从事MyS ...
- excel 中批量生成mysql的脚本
一.假设你的表格有A.B.C三列数据,希望导入到你的数据库中表格table,对应的字段分别是col1.col2.col3 二.在你的表格中增加一列,利用excel的公式自动生成sql语句,具体方法如下 ...
- python使用多进程
python多线程适合IO密集型场景,而在CPU密集型场景,并不能充分利用多核CPU,而协程本质基于线程,同样不能充分发挥多核的优势. 针对计算密集型场景需要使用多进程,python的multipro ...
- You must reset your password using ALTER USER statement before executing this statement.
MySQL 5.7之后,刚初始化的MySQL实例要求先修改密码.否则会报错: mysql> create database test; ERROR 1820 (HY000): You must ...