题意:求$\sum_{i=1}^{n}\sum_{j=1}^{n}lcm(i,j)^{gcd(i,j)}$

神仙题...

首先可能会想到一个转化,就是$lcm(i,j)=\frac{ij}{gcd(i,j)}$

然后大力往下推式子,发现你推不下去了...

因为$d$在分母上!!!

然后我们考虑换一种推法:如果我们对$ij$同时除掉$gcd(i,j)$,这样的话问题就可以转化成这个样子:

$\sum_{d=1}^{n}\sum_{i=1}^{\frac{n}{d}}\sum_{j=1}^{\frac{m}{d}}[gcd(i,j)\equiv 1](ijd)^{d}$

然后把$d$拿出来,维护一下后面那坨,有:

$\sum_{d=1}^{n}d^{d}\sum_{i=1}^{\frac{n}{d}}\sum_{j=1}^{\frac{m}{d}}\sum_{t|gcd(i,j)}\mu(t)(ij)^{d}$

改变一下枚举顺序,得到:

$\sum_{d=1}^{n}d^{d}\sum_{t=1}^{\frac{n}{d}}\mu(t)\sum_{i=1}^{\frac{n}{dt}}\sum_{j=1}^{\frac{m}{dt}}(ijt^{2})^{d}$

(也就是在后面的$ij$乘积这一项中单独考虑$t$的贡献)

然后再整理,就得到:

$\sum_{d=1}^{n}d^{d}\sum_{t=1}^{\frac{n}{d}}\mu(t)t^{2d}\sum_{i=1}^{\frac{n}{dt}}i^{d}\sum_{j=1}^{\frac{m}{dt}}j^{d}$

然后我们就暴力计算即可,每次计算时都要先预处理出$[1,\frac{n}{d}]$的$i^{d}$的前缀和,再暴力查询即可,时间复杂度为调和级数$O(nlnn)$

注意每次求幂可以递推,不要快速幂!!!会退化成$O(nlog_{2}^{2}n)$!

代码:

#include <cstdio>
#include <cmath>
#include <cstring>
#include <cstdlib>
#include <iostream>
#include <algorithm>
#include <queue>
#include <stack>
#define ll long long
using namespace std;
const ll mode=1000000007;
int pri[5000005],mu[5000005],used[5000005];
ll S[5000005],mi[5000005];
int cnt=0;
ll pow_mul(ll x,ll y)
{
ll ret=1;
while(y)
{
if(y&1)ret=ret*x%mode;
x=x*x%mode,y>>=1;
}
return ret;
}
void init()
{
mu[1]=1;
for(int i=2;i<=5000000;i++)
{
if(!used[i])pri[++cnt]=i,mu[i]=-1;
for(int j=1;j<=cnt&&i*pri[j]<=5000000;j++)
{
used[i*pri[j]]=1;
if(i%pri[j]==0){mu[i*pri[j]]=0;break;}
mu[i*pri[j]]=-mu[i];
}
}
}
int main()
{
init();
ll n,m;
scanf("%lld%lld",&n,&m);
if(n>m)swap(n,m);
ll ans=0;
for(int i=1;i<=m;i++)mi[i]=1;
for(int i=1;i<=n;i++)
{
ll s=pow_mul(i,i);
S[0]=0;
for(int j=1;j<=m/i;j++)mi[j]=mi[j]*j%mode,S[j]=(S[j-1]+mi[j])%mode;
ll tempc=0;
for(int j=1;j<=n/i;j++)
{
ll temps=(mu[j]*mi[j]*mi[j]%mode+mode)%mode;
tempc=(tempc+temps*S[n/i/j]%mode*S[m/i/j]%mode)%mode;
}
ans=(ans+s*tempc)%mode;
}
printf("%lld\n",ans);
return 0;
}

最新文章

  1. IOS OC数据类型
  2. Android源代码结构分析
  3. JavaScript 2016年的概况
  4. Linux之date
  5. nginx php-cgi php
  6. 通俗易懂的讲解iphone视图控制器的生命周期
  7. CentOS 5.6 netInstall可以的在线安装方式。
  8. POJ 3268 Silver Cow Party ( Dijkstra )
  9. UGUI 全方位了解
  10. 一个UWSGI的例子
  11. Linq用法笔记
  12. 201521123101 《Java程序设计》第4周学习总结
  13. python爬虫入门(九)Scrapy框架之数据库保存
  14. layui基本使用
  15. jQuery 简单案例
  16. hdu3506 Monkey Party (区间dp+四边形不等式优化)
  17. Sitecore CMS中创建模板
  18. python 小练习12
  19. 一款基于jquery超炫的图片切换特效
  20. 读取指定路径的Properties文件

热门文章

  1. 关于github的自动化检测
  2. iOS笔记 - Runtime 01:前期准备(isa结构 | Class结构 | 方法缓存)
  3. python逐行读取替换文件中的字符串
  4. wpf treeview 新增右键菜单
  5. IIS添加MIME类型实现未知文件下载
  6. https原理(三)双向实践(curl)
  7. Dynamics 365 登录后网页显示空白
  8. C语言 数据编码方式
  9. vim超级替换
  10. 37.Spring注解相关面试题