【bzoj3561】DZY Loves Math VI 莫比乌斯反演
题目描述
输入
输出
样例输入
5 4
样例输出
424
题解
莫比乌斯反演
(为了方便,以下公式默认$n\le m$)
$\ \ \ \ \sum\limits_{i=1}^n\sum\limits_{j=1}^mlcm(i,j)^{gcd(i,j)}\\=\sum\limits_{d=1}^n\sum\limits_{i=1}^n\sum\limits_{j=1}^m[gcd(i,j)=d](\frac{ij}d)^d\\=\sum\limits_{d=1}^n\sum\limits_{i=1}^{\lfloor\frac nd\rfloor}\sum\limits_{j=1}^{\lfloor\frac md\rfloor}[gcd(i,j)=1](ijd)^d\\=\sum\limits_{d=1}^nd^d\sum\limits_{i=1}^{\lfloor\frac nd\rfloor}\sum\limits_{j=1}^{\lfloor\frac md\rfloor}[gcd(i,j)=1](ij)^d\\=\sum\limits_{d=1}^nd^d\sum\limits_{i=1}^{\lfloor\frac nd\rfloor}\sum\limits_{j=1}^{\lfloor\frac md\rfloor}(ij)^d\sum\limits_{p|gcd(i,j)}\mu(p)\\=\sum\limits_{d=1}^nd^d\sum\limits_{p=1}^{\lfloor\frac nd\rfloor}\mu(p)\sum\limits_{i=1}^{\lfloor\frac n{dp}\rfloor}\sum\limits_{j=1}^{\lfloor\frac m{dp}\rfloor}(ijp^2)^d\\=\sum\limits_{d=1}^nd^d\sum\limits_{p=1}^{\lfloor\frac nd\rfloor}p^{2d}\mu(p)\sum\limits_{i=1}^{\lfloor\frac n{dp}\rfloor}\sum\limits_{j=1}^{\lfloor\frac m{dp}\rfloor}i^dj^d\\=\sum\limits_{d=1}^nd^d\sum\limits_{p=1}^{\lfloor\frac nd\rfloor}p^{2d}\mu(p)\sum\limits_{i=1}^{\lfloor\frac n{dp}\rfloor}i^d\sum\limits_{j=1}^{\lfloor\frac m{dp}\rfloor}j^d$
此时暴力即可。。。本题就做完了。。。复杂度竟然是对的。。。
快筛$\mu$,再先枚举$d$,然后处理出$1\sim\lfloor\frac md\rfloor$中每个数的$d$次方及其前缀和。由于$d$是从小到大枚举的,因此可以递推出来。
然后只需要先用快速幂求$d^d$,其余的对于每一个$p$均可$O(1)$解出(其中$p^2d=(p^d)^2$),因此总的时间复杂度是每次快速幂的时间复杂度$O(n\log n)$+调和级数时间复杂度$O(n\ln n)$=$O(n\log n)$。
#include <cstdio>
#include <algorithm>
#define N 500010
#define mod 1000000007
using namespace std;
typedef long long ll;
int mu[N] , np[N] , prime[N] , tot;
ll b[N] , sum[N];
inline ll pow(ll x , int y)
{
ll ans = 1;
while(y)
{
if(y & 1) ans = ans * x % mod;
x = x * x % mod , y >>= 1;
}
return ans;
}
int main()
{
int n , m , i , j;
ll d , ans = 0;
scanf("%d%d" , &n , &m);
if(n > m) swap(n , m);
mu[1] = 1;
for(i = 2 ; i <= n ; i ++ )
{
if(!np[i]) mu[i] = -1 , prime[++tot] = i;
for(j = 1 ; j <= tot && i * prime[j] <= n ; j ++ )
{
np[i * prime[j]] = 1;
if(i % prime[j] == 0)
{
mu[i * prime[j]] = 0;
break;
}
else mu[i * prime[j]] = -mu[i];
}
}
for(i = 1 ; i <= m ; i ++ ) b[i] = 1;
for(i = 1 ; i <= n ; i ++ )
{
for(j = 1 ; j * i <= m ; j ++ )
b[j] = b[j] * j % mod , sum[j] = (sum[j - 1] + b[j]) % mod;
d = pow(i , i);
for(j = 1 ; j * i <= n ; j ++ )
ans = (ans + mu[j] * b[j] * b[j] % mod * d % mod * sum[n / i / j] % mod * sum[m / i / j] % mod + mod) % mod;
}
printf("%lld\n" , ans);
return 0;
}
【bzoj3561】DZY Loves Math VI 莫比乌斯反演的更多相关文章
- BZOJ3561 DZY Loves Math VI 莫比乌斯反演
传送门 看到\(gcd\)相关先推式子(默认\(N \leq M\)): \(\begin{align*} \sum\limits_{i=1}^N \sum\limits_{j=1}^M (lcm(i ...
- BZOJ 3561: DZY Loves Math VI 莫比乌斯反演+复杂度分析
推到了一个推不下去的形式,然后就不会了 ~ 看题解后傻了:我推的是对的,推不下去是因为不需要再推了. 复杂度看似很大,但其实是均摊 $O(n)$ 的,看来分析复杂度也是一个能力啊 ~ code: #i ...
- 【BZOJ3309】DZY Loves Math(莫比乌斯反演)
[BZOJ3309]DZY Loves Math(莫比乌斯反演) 题面 求 \[\sum_{i=1}^a\sum_{j=1}^bf(gcd(a,b))\] 其中,\(f(x)\)表示\(x\)分解质因 ...
- [BZOJ3561] DZY Loves Math VI
(14.10.28改) 本来只想写BZOJ3739:DZY Loves Math VIII的,不过因为和VI有关系,而且也没别人写过VI的题解,那么写下. 不过我还不会插公式…… http://www ...
- BZOJ3309 DZY Loves Math(莫比乌斯反演+线性筛)
一通正常的莫比乌斯反演后,我们只需要求出g(n)=Σf(d)*μ(n/d)的前缀和就好了. 考虑怎么求g(n).当然是打表啊.设n=∏piai,n/d=∏pibi .显然若存在bi>1则这个d没 ...
- DZY LOVES MATH (莫比乌斯反演)
OK!开始更新莫比乌斯反演 先看了一下数据范围,嗯,根据\(jiry\)老师的真言,我们一定是可以筛一遍然后用根号或者是\(log\)的算法. 题目思路挺简单,就是把原始的式子化成: \(\sum_{ ...
- BZOJ3561 DZY Loves Math VI 数论 快速幂 莫比乌斯反演
原文链接http://www.cnblogs.com/zhouzhendong/p/8116330.html UPD(2018-03-26):回来重新学数论啦.之前的博客版面放在更新之后的后面. 题目 ...
- BZOJ3561 DZY Loves Math VI 【莫比乌斯反演】
题目 给定正整数n,m.求 输入格式 一行两个整数n,m. 输出格式 一个整数,为答案模1000000007后的值. 输入样例 5 4 输出样例 424 提示 数据规模: 1<=n,m<= ...
- DZY Loves Math(莫比乌斯反演)
\(x=p_1^{\alpha_1}p_2^{\alpha_2}...p_c^{\alpha_c}\) \(f(x)=\max(\alpha_1,\alpha_2,...,\alpha_c)\) \( ...
随机推荐
- django ORM单表操作
1.ORM介绍 ORM是“对象-关系-映射”的简称 映射关系: mysql---------Python 表名----------类名 字段----------属性 表记录--------实例化对象 ...
- HTML第二章:列表,表格,媒体元素
第二章:列表,表格,媒体元素 列表:有三种,有序列表,无序列表,定义列表 1.有序列表:<ol></ol> 列表项:<li></li&g ...
- ABAP调用WebService时日期类型问题
在使用ABAP调用WebService时, 提示CX_SY_CONVERSION_NO_DATE_TIME,意思是日期格式不能转化. 究其原因是ABAP里没有相应的数据类型与WebService描述里 ...
- js动画之无缝滚动
效果图如下: HTML代码如下: <!DOCTYPE html> <html lang="en"> <head> <meta charse ...
- #Python编程从入门到实践#第三章笔记
列表简介 1.什么是列表 列表:由一系列按也顶顺序排列的元素组成.元素之间可以没有任何关系. 列表:用方括号[]表示,并用逗号分隔其中元素.名称一般为复数 2.访问元素 (1)列表是有序集合 ...
- Matplotlib 图表的基本参数设置
1.图名,图例,轴标签,轴边界,轴刻度,轴刻度标签 # 图名,图例,轴标签,轴边界,轴刻度,轴刻度标签等 df = pd.DataFrame(np.random.rand(10,2),columns= ...
- 7 定制10MINs首页2
1.添加 <div class="ui basic segment"> <h1 class="ui center aligned header" ...
- laravel5.5事件广播系统
目录 1. 定义广播事件 1.1 广播名称 1.2 广播数据 1.3 广播队列 1.4 广播条件 2. 频道授权 2.1 定义授权路由 2.2 定义授权回调 3. 对事件进行广播 3.1 可以使用ev ...
- 《数据结构与算法分析:C语言描述》复习——第十章“算法设计技巧”——Huffman编码
2014.07.06 16:47 简介: 给定一段有固定符号集合S构成的文本T,集合S中总共有n种符号.如果对于每种符号,使用一种不同的由‘0’和‘1’构成的位字符串来代替,比如: ‘a’->‘ ...
- 剑指Offer - 九度1352 - 和为S的两个数字
剑指Offer - 九度1352 - 和为S的两个数字2014-02-05 18:15 题目描述: 输入一个递增排序的数组和一个数字S,在数组中查找两个数,是的他们的和正好是S,如果有多对数字的和等于 ...