【BZOJ3561】DZY Loves Math VI (数论)
【BZOJ3561】DZY Loves Math VI (数论)
题面
题解
ans&=\sum_{i=1}^n\sum_{j=1}^m\sum_{d=1}^n[gcd(i,j)=d](\frac{ij}{d})^d\\
&=\sum_{d=1}^nd^d\sum_{i=1}^{n/d}\sum_{j=1}^{m/d}[gcd(i,j)=1]i^dj^d\\
&=\sum_{d=1}^nd^d\sum_{i=1}^{n/d}\sum_{j=1}^{m/d}i^dj^d\sum_{x|gcd(i,j)}\mu(x)\\
&=\sum_{d=1}^nd^d\sum_{i=1}^{n/d}\sum_{j=1}^{m/d}i^dj^d\sum_{x|i,x|j}\mu(x)\\
&=\sum_{d=1}^nd^d\sum_{x=1}^{n/d}\mu(x)\sum_{i=1}^{n/xd}\sum_{j=1}^{m/xd}(ix)^d(jx)^d\\
&=\sum_{d=1}^nd^d\sum_{x=1}^{n/d}\mu(x)x^{2d}\sum_{i=1}^{n/xd}\sum_{j=1}^{m/xd}i^dj^d\\
\end{aligned}\]
然后发现\(\sum_i i^d\)不会算,实际上枚举\(d\)的时候就大力预处理一次,这样子的预处理的复杂度是调和级数的。
然后整个式子都调和级数的爆算就完了。。
#include<iostream>
#include<cstdio>
using namespace std;
#define MOD 1000000007
#define MAX 500500
int mu[MAX],pri[MAX],tot;
bool zs[MAX];
int n,m,ans,v[MAX],s[MAX],x[MAX],D[MAX];
int fpow(int a,int b){int s=1;while(b){if(b&1)s=1ll*s*a%MOD;a=1ll*a*a%MOD;b>>=1;}return s;}
void pre(int n)
{
mu[1]=1;
for(int i=2;i<=n;++i)
{
if(!zs[i])pri[++tot]=i,mu[i]=MOD-1;
for(int j=1;j<=tot&&i*pri[j]<=n;++j)
{
zs[i*pri[j]]=true;
if(i%pri[j]==0){mu[i*pri[j]]=0;break;}
mu[i*pri[j]]=MOD-mu[i];
}
}
}
int main()
{
scanf("%d%d",&n,&m);if(n>m)n^=m,m^=n,n^=m;pre(n);
for(int i=1;i<=m;++i)v[i]=x[i]=1;
for(int i=1;i<=n;++i)D[i]=fpow(i,i);
for(int d=1;d<=n;++d)
{
for(int i=1;i<=m/d;++i)v[i]=1ll*v[i]*i%MOD;
for(int i=1;i<=m/d;++i)s[i]=(s[i-1]+v[i])%MOD;
for(int i=1;i<=n/d;++i)x[i]=1ll*x[i]*i%MOD*i%MOD;
for(int i=1;i<=n/d;++i)ans=(ans+1ll*D[d]*mu[i]%MOD*x[i]%MOD*s[n/d/i]%MOD*s[m/d/i])%MOD;
}
printf("%d\n",ans);
return 0;
}
【BZOJ3561】DZY Loves Math VI (数论)的更多相关文章
- BZOJ3561 DZY Loves Math VI 数论 快速幂 莫比乌斯反演
原文链接http://www.cnblogs.com/zhouzhendong/p/8116330.html UPD(2018-03-26):回来重新学数论啦.之前的博客版面放在更新之后的后面. 题目 ...
- [BZOJ3561] DZY Loves Math VI
(14.10.28改) 本来只想写BZOJ3739:DZY Loves Math VIII的,不过因为和VI有关系,而且也没别人写过VI的题解,那么写下. 不过我还不会插公式…… http://www ...
- BZOJ3561 DZY Loves Math VI 莫比乌斯反演
传送门 看到\(gcd\)相关先推式子(默认\(N \leq M\)): \(\begin{align*} \sum\limits_{i=1}^N \sum\limits_{j=1}^M (lcm(i ...
- BZOJ3561 DZY Loves Math VI 【莫比乌斯反演】
题目 给定正整数n,m.求 输入格式 一行两个整数n,m. 输出格式 一个整数,为答案模1000000007后的值. 输入样例 5 4 输出样例 424 提示 数据规模: 1<=n,m<= ...
- 【BZOJ 3561】 3561: DZY Loves Math VI (莫比乌斯,均摊log)
3561: DZY Loves Math VI Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 205 Solved: 141 Description ...
- BZOJ 3561 DZY Loves Math VI
BZOJ 3561 DZY Loves Math VI 求\(\sum_{i=1}^{n}\sum_{j=1}^{m}\text{lcm}(i,j)^{\gcd(i,j)}\),钦定\(n\leq m ...
- 【bzoj3561】DZY Loves Math VI 莫比乌斯反演
题目描述 给定正整数n,m.求 输入 一行两个整数n,m. 输出 一个整数,为答案模1000000007后的值. 样例输入 5 4 样例输出 424 题解 莫比乌斯反演 (为了方便,以下公式默认$ ...
- BZOJ3560 DZY Loves Math V 数论 快速幂
原文链接http://www.cnblogs.com/zhouzhendong/p/8111725.html UPD(2018-03-26):蒟蒻回来重新学数论了.更新了题解和代码.之前的怼到后面去了 ...
- 【BZOJ】3561: DZY Loves Math VI
题意 求\(\sum_{i=1}^{n} \sum_{j=1}^{m} lcm(i, j)^{gcd(i, j)}\)(\(n, m<=500000\)) 分析 很显然要死推莫比乌斯 题解 设\ ...
随机推荐
- Java工具类——UUIDUtils
借用一下百度百科的解释,来看一下UUID是什么. UUID含义是通用唯一识别码 (Universally Unique Identifier),这 是一个软件建构的标准,也是被开源软件基金会 (Ope ...
- Python_迭代器、生成器、列表推导式,生成器表达式
1.迭代器 (1)可迭代对象 s1 = ' for i in s1: print(i) 可迭代对象 示例结果: D:\Python36\python.exe "E:/Python/课堂视频/ ...
- stark组件之展示数据(查)
1.编辑按钮构建完成 2.构造表头,删除,checkbox,links编辑 3.代码+总结 1.编辑按钮构建完成 1.必备知识预习 第一个会打印5. 第二个输出alex alex是person ...
- java总结:double取两位小数的多种方法
1.方法一 四舍五入: import java.math.BigDecimal; double f = 111231.5585; BigDecimal b = new BigDecimal(f); d ...
- MySQL左连接时 返回的记录条数 比 左边表 数量多
在学MySQL的连接时,为了便于记忆,就将左连接 记做 最后结果的总记录数 和 进行左连接的左表的记录数相同,简单的说就是下面这个公式 count(table A left join table B) ...
- 使用ajax请求后端程序时,关于目标程序路径问题
这里涉及到和PHP中类似的问题,有待更新!!!
- Docker bridge br0 pipework
Docker Centos7 下建立 Docker 桥接网络 - weifengCorp - 博客园https://www.cnblogs.com/weifeng1463/p/7468497.html ...
- WCF使用相关
1.不显示WCF服务主机 在WCF项目属性中的WCF选项卡总关闭下图的选项 2.在其他项目中承载WCF服务 其他加载的操作一致,需要把WCF的endpoint和behavior节点复制到 启动服务的那 ...
- 【Java基础】switch语句实现根据数字输出对应星期
代码: import java.util.Scanner; /* * switch语句格式: * switch(表达式) { * case 值1: * 语句体1; * break; * case 值2 ...
- JavaMail入门第一篇 邮件简介及API概述
现如今,电子邮件在我们的生活当中扮演着越来越重要的角色,我们每个人几乎都会与其打交道(至少时不时我们都会接收到莫名其妙的垃圾邮件),在工作中,使用邮件进行交流沟通,可以使我们的工作有迹可循,也显的较为 ...