题目大意:

求:

\[\sum_{i-1}^n\sum_{j=1}^nmax(i,j)\sigma(i*j)
\]

题解

对于这个\(\max\),套路的把它转化成:

\[2*\sum_{i=1}^n\sum_{j=1}^ii*\sigma(i*j)-\sum_{i=1}^n i*\sigma(i*i)
\]

对于前面的部分,我们可以:

\[\sum_{i=1}^{n}\sum_{j=1}^ii\sum_{a|i}\sum_{b|j}a*\frac{j}{b}[(a,b)==1]
\]

\[\sum_{i=1}^{n}i\sum_{j=i}^n\sum_{a|i}\sum_{b|j}a*\frac{j}{b}\sum_{d|(i,j)}\mu(d)
\]

\[\sum_{d=1}^n\mu(d)\sum_{i=1}^{\frac{n}{d}}i*d\sum_{a|i}a*d\sum_{j=1}^{i}\sum_{b|j}\frac{j}{b}
\]

\[\sum_{d=1}^n\mu(d)d^2\sum_{i=1}^{\frac{n}{d}}i\sum_{a|i}a\sum_{j=1}^i\sum_{b|j}\frac{j}{b}
\]

\[\sum_{d=1}^n\mu(d)d^2\sum_{i=1}^{\frac{n}{d}}g_i
\]

\[\sum_{D=1}^n\sum_{d|D}\mu(d)d^2G_{D/d}
\]

\[g_n=n*\sigma_n*\sum_{i=1}^n \sigma_i
\]

这个\(g\)数组就可以线性预处理了。

后面的部分可以线性筛,姿势++。

代码

#include<bits/stdc++.h>
#define N 1000009
using namespace std;
typedef long long ll;
const int maxn=1000000;
const int mod=1000000007;
bool vis[N];
int prime[N];
ll mu[N],md[N],mdp[N],ans[N],g[N],sum[N],f[N];
ll sig[N],sig2[N];
inline ll rd(){
ll x=0;char c=getchar();bool f=0;
while(!isdigit(c)){if(c=='-')f=1;c=getchar();}
while(isdigit(c)){x=(x<<1)+(x<<3)+(c^48);c=getchar();}
return f?-x:x;
}
inline void MOD(ll &x){x=x>=mod?x-mod:x;}
inline void prework(int n){
sig[1]=mu[1]=sig2[1]=md[1]=mdp[1]=1;
for(int i=2;i<=n;++i){
//cout<<i<<" "<<md[i]<<" "<<mdp[i]<<endl;
if(!vis[i]){
prime[++prime[0]]=i;
md[i]=mdp[i]=i;
mu[i]=mod-1;
sig[i]=i+1;
sig2[i]=(1ll*i*i%mod+i+1)%mod;
}
for(int j=1;j<=prime[0]&&(i*prime[j])<=n;++j){
vis[i*prime[j]]=1;
if(i%prime[j]==0){
mu[i*prime[j]]=0;
md[i*prime[j]]=prime[j];
mdp[i*prime[j]]=mdp[i]*prime[j];
sig[i*prime[j]]=(sig[i]+1ll*prime[j]*mdp[i]%mod*sig[i/mdp[i]]%mod)%mod;
sig2[i*prime[j]]=sig2[i]+(1ll*mdp[i]*mdp[i]%mod*md[i]%mod+
1ll*mdp[i]*mdp[i]%mod*md[i]%mod*md[i]%mod)*sig2[i/mdp[i]]%mod;
sig2[i*prime[j]]%=mod;
break;
}
mu[i*prime[j]]=mod-mu[i];
sig[i*prime[j]]=sig[i]*sig[prime[j]]%mod;
md[i*prime[j]]=mdp[i*prime[j]]=prime[j];
sig2[i*prime[j]]=sig2[i]*sig2[prime[j]]%mod;
}
}
for(int i=1;i<=n;++i)MOD(sum[i]=sum[i-1]+sig[i]);
for(int i=1;i<=n;++i){
g[i]=1ll*sig[i]*i%mod*sum[i]%mod;
MOD(sig2[i]=sig2[i-1]+sig2[i]*i%mod);
for(int j=i;j<=n;j+=i)MOD(f[j]+=g[i]*mu[j/i]%mod*(j/i)%mod*(j/i)%mod);
MOD(f[i]+=f[i-1]);
ans[i]=(f[i]*2-sig2[i]+mod)%mod;
}
}
int main(){
prework(maxn);
int T=rd(),ct=0;
while(T--){
int x=rd();ct++;
printf("Case #%d: %lld\n",ct,ans[x]);
}
return 0;
}

51nod1584加权约数和的更多相关文章

  1. 51Nod1584 加权约数和

    这题其实就是反演一波就好了(那你还推了一下午+一晚上),不过第一次碰到\(O(n\log n)\)预处理分块和式的方法-- 不知为啥我跟唐教主的题解推的式子不太一样--(虽然本质上可能是相同的吧) 那 ...

  2. 【51Nod1584】加权约数和(数论)

    [51Nod1584]加权约数和(数论) 题面 51Nod 题解 要求的是\[\sum_{i=1}^n\sum_{j=1}^n max(i,j)\sigma(ij)\] 这个\(max\)太讨厌了,直 ...

  3. 51NOD 1584 加权约数和 [莫比乌斯反演 转化 Trick]

    1584 加权约数和 题意:求\(\sum_{i=1}^{N} \sum_{j=1}^{N} {\max(i,j)\cdot \sigma(i\cdot j)}\) 多组数据\(n \le 10^6, ...

  4. 51nod 1584 加权约数和 约数和函数小trick 莫比乌斯反演

    LINK:加权约数和 我曾经一度认为莫比乌斯反演都是板子题. 做过这道题我认输了 不是什么东西都是板子. 一个trick 设\(s(x)\)为x的约数和函数. 有 \(s(i\cdot j)=\sum ...

  5. [51Nod 1584] 加权约数和

    Description 在整理以前的试题时,他发现了这样一道题目:"求 \(\sum\sigma(i)\),其中 \(1≤i≤N\),\(σ(i)\) 表示 \(i\) 的约数之和.&quo ...

  6. 51nod 1584加权约数和

    学到了好多东西啊这题... https://blog.csdn.net/sdfzyhx/article/details/72968468 #include<bits/stdc++.h> u ...

  7. [51 Nod 1584] 加权约数和

    题意 求∑i=1N∑j=1Nmax(i,j)⋅σ1(ij)\large \sum_{i=1}^N\sum_{j=1}^Nmax(i,j)\cdot\sigma_1(ij)i=1∑N​j=1∑N​max ...

  8. Solution -「51nod 1584」加权约数和

    \(\mathcal{Description}\)   Link.   令 \(\sigma(n)\) 为 \(n\) 的约数之和.求: \[\sum_{i=1}^n\sum_{j=1}^n\max\ ...

  9. T1加权像(T1 weighted image,T1WI)

    T1加权成像(T1-weighted imaging,T1WI)是指这种成像方法重点突出组织纵向弛豫差别,而尽量减少组织其他特性如横向弛豫等对图像的影响. 弛豫:物理用语,从某一个状态恢复到平衡态的过 ...

随机推荐

  1. MySQL的count(*)性能怎么样?

    对于count(主键id)来说,innodb引擎会遍历整张表,把每一行的id值都取出来,返回给server层,server层判断id值不为空,就按行累加 对于count(1)来说,innodb引擎遍历 ...

  2. 使用Dockerfile制作镜像

    组成部分 基础镜像信息       FROM 维护者信息    MAINTAINER.LABEL 镜像操作指令       RUN.COPY.ADD.EXPOSE.WORKDIR.ONBUILD.US ...

  3. Vue 2.0 入门系列(14)学习 Vue.js 需要掌握的 es6 (1)

    针对之前学习 Vue 用到的 es6 特性,以及接下来进一步学习 Vue 要用到的 es6 特性,做下简单总结. var.let 与 const var 与 let es6 之前,JavaScript ...

  4. layui动态渲染select等组件并初始化赋值失败

    描诉:有一个用户信息form表单,其中有部门单选框,数据库中有一张dept(部门)表,要动态渲染出所有部门,并默认选中用户所在部门 关键代码: html页面 <div class="l ...

  5. Linux环境部署Node.js

    介绍 先前在阿里云ECS上部署Node.js,碰到不少坑,都是自己不仔细造成的,所以准备再部署一遍,并记录下来.我将我的服务器重置了,这次选择的是CentOS 7.4 64位,上次的是7.2的. 使用 ...

  6. C#中的委托和事件(一)——delegate

    前言 来说一说委托(delegate)和事件(event),本篇采取的形式是翻译微软Delegate的docs中的重要部分(不要问我为什么微软的docs有中文还要读英文,因为读中文感觉自己有阅读障碍- ...

  7. PyCharm控制台python shell 和 IPython shell的切换

    1. IPython介绍 IPython 是一个 python 的交互式 shell,比默认的python shell 好用得多,支持变量自动补全,自动缩进,支持 bash shell 命令,内置了许 ...

  8. ThinkPHP5 支付宝支付扩展库(超级简单,超级好用!)

    ThinkPHP5 支付宝支付扩展库, 一个静态方法的调用就可以实现,包括手机网站支付.电脑网站支付.支付查询.退款.退款查询.对账单所有功能,而且是2017年7月20日最新版~我的想法是,调用一个静 ...

  9. python学习笔记(1):python基础

    python基础回顾 1.Ipython魔术命令 %timeit //多次执行一条语句,并返回平均时间,%%time->多条语句,用于测试一条语句用了多少时间 %time //返回执行一条语句的 ...

  10. python中的Tkinter模块

    Tkinter模块("Tk 接口")是Python的标准Tk GUI工具包的接口.Tk和Tkinter可以在大多数的Unix平台下使用,同样可以应用在Windows和Macinto ...