LINK:加权约数和

我曾经一度认为莫比乌斯反演都是板子题.

做过这道题我认输了 不是什么东西都是板子.

一个trick 设\(s(x)\)为x的约数和函数.

有 \(s(i\cdot j)=\sum_{x|i}\sum_{y|j}[(x,y)==1]x\cdot \frac{j}{y}\)

证明的话可以自己意会 赶时间.

然后 这道题唯一特别的是转换完后 直接莽推根号做法是行不通的 同时也过不去.

不如先考虑求 \(f_i=\sum_{j=1}^i s(i\cdot j)\)

然后带入上面的那个trick 莫比乌斯反演一波 发现什么都得不到.

此时 配合上面trick的转换是 \(f_i=\sum_{j=1}^i\sum_{x|j,x|i}\mu(x)\sum_{u|i,x|u}\sum_{v|j,x|v}u\frac{j}{v}\)

绝妙或者是套路的转换为 \(f_i=\sum_{j=1}^i\sum_{x|j,x|i}\mu(x)s(x\cdot s(\frac{i}{x}))s(\frac{j}{x})\)

下面颠倒求和即可.

然后就可以做了 复杂度 \(nlnn+T\)

code
//#include<bits/stdc++.h>
#include<iostream>
#include<cstdio>
#include<ctime>
#include<cctype>
#include<queue>
#include<deque>
#include<stack>
#include<iostream>
#include<iomanip>
#include<cstdio>
#include<cstring>
#include<string>
#include<ctime>
#include<cmath>
#include<cctype>
#include<cstdlib>
#include<queue>
#include<deque>
#include<stack>
#include<vector>
#include<algorithm>
#include<utility>
#include<bitset>
#include<set>
#include<map>
#define ll long long
#define db double
#define INF 1000000000000000000ll
#define inf 100000000000000000ll
#define ldb long double
#define pb push_back
#define put_(x) printf("%d ",x);
#define get(x) x=read()
#define gt(x) scanf("%d",&x)
#define gi(x) scanf("%lf",&x)
#define put(x) printf("%d\n",x)
#define putl(x) printf("%lld\n",x)
#define rep(p,n,i) for(RE int i=p;i<=n;++i)
#define go(x) for(int i=lin[x],tn=ver[i];i;tn=ver[i=nex[i]])
#define fep(n,p,i) for(RE int i=n;i>=p;--i)
#define vep(p,n,i) for(RE int i=p;i<n;++i)
#define pii pair<int,int>
#define mk make_pair
#define RE register
#define P 1000000007ll
#define gf(x) scanf("%lf",&x)
#define pf(x) ((x)*(x))
#define uint unsigned long long
#define ui unsigned
#define EPS 1e-10
#define sq sqrt
#define S second
#define F first
#define mod 1000000007
#define max(x,y) ((x)<(y)?y:x)
using namespace std;
char *fs,*ft,buf[1<<15];
inline char gc()
{
return (fs==ft&&(ft=(fs=buf)+fread(buf,1,1<<15,stdin),fs==ft))?0:*fs++;
}
inline int read()
{
RE int x=0,f=1;RE char ch=gc();
while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=gc();}
while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=gc();}
return x*f;
}
const int MAXN=1000010;
int n,T,top;
int v[MAXN],p[MAXN],d[MAXN],sum[MAXN],D[MAXN],w[MAXN],f[MAXN],in[MAXN],mu[MAXN];
inline int add(int x,int y){return x+y>=mod?x+y-mod:x+y;}
inline int mul(int x,int y){return (ll)x*y%mod;}
inline int mus(int x,int y){return x-y<0?x-y+mod:x-y;}
inline int ksm(int b,int p)
{
int cnt=1;
while(p)
{
if(p&1)cnt=mul(cnt,b);
b=mul(b,b);p=p>>1;
}
return cnt;
}
inline void prepare()
{
sum[1]=mu[1]=in[1]=d[1]=D[1]=1;
rep(2,n,i)
{
in[i]=mul(in[mod%i],(mod-mod/i));
if(!v[i])
{
v[i]=p[++top]=i;mu[i]=-1;
w[i]=p[top];d[i]=i+1;
D[i]=add(1+i,(ll)i*i%mod);
}
sum[i]=add(d[i],sum[i-1]);
rep(1,top,j)
{
if(p[j]>n/i)break;
int ww=p[j]*i;
v[ww]=p[j];
if(v[i]==p[j])
{
w[ww]=w[i]*p[j];
if(w[ww]==ww)
{
d[ww]=add(d[i],ww);
D[ww]=add(D[i],add((ll)ww*ww%mod,(ll)i*i%mod*p[j]%mod));
}
else
{
d[ww]=mul(d[i/w[i]],d[w[ww]]);
D[ww]=mul(D[i/w[i]],D[w[ww]]);
}
break;
}
w[ww]=p[j];d[ww]=mul(d[i],d[p[j]]);
D[ww]=mul(D[i],D[p[j]]);
mu[ww]=-mu[i];
}
}
/*rep(1,1000,i)
{
if(D[i]!=d[i*i])
{
cout<<"ww"<<endl;
cout<<i<<endl;
return;
}
}*/
rep(1,n,i)
{
if(mu[i])
{
for(int j=i;j<=n;j+=i)
f[j]=(f[j]+mu[i]*(ll)i*d[j/i]%mod*sum[j/i])%mod;
}
f[i]=((mul(f[i],2*i)-mul(i,D[i]))%mod+mod)%mod;
f[i]=add(f[i],f[i-1]);
}
}
signed main()
{
//freopen("1.in","r",stdin);
n=1000000;prepare();
get(T);
rep(1,T,W)
{
printf("Case #%d: ",W);
put(f[read()]);
}
return 0;
}

51nod 1584 加权约数和 约数和函数小trick 莫比乌斯反演的更多相关文章

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

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

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

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

  3. 51nod 1584加权约数和

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

  4. 51Nod 欢乐手速场1 C 开心的小Q[莫比乌斯函数]

    开心的小Q tangjz (命题人) quailty (测试)   基准时间限制:1 秒 空间限制:131072 KB 分值: 80 如果一个数字存在一个约数是完全平方数,那么小Q就认为这个数是有趣的 ...

  5. 【BZOJ3994】约数个数和(莫比乌斯反演)

    [BZOJ3994]约数个数和(莫比乌斯反演) 题面 求\[\sum_{i=1}^n\sum_{j=1}^md(ij)\] 多组数据\((<=50000组)\) \(n,m<=50000\ ...

  6. 【BZOJ3994】[SDOI2015] 约数个数和(莫比乌斯反演)

    点此看题面 大致题意: 设\(d(x)\)为\(x\)的约数个数,求\(\sum_{i=1}^N\sum_{j=1}^Md(i·j)\). 莫比乌斯反演 这是一道莫比乌斯反演题. 一个重要的性质 首先 ...

  7. [SDOI2015][bzoj 3994][Luogu P3327] 约数个数和 (莫比乌斯反演)

    题目描述 设d(x)d(x)d(x)为xxx的约数个数,给定NNN.MMM,求 ∑i=1N∑j=1Md(ij)\sum^{N}_{i=1}\sum^{M}_{j=1} d(ij)i=1∑N​j=1∑M ...

  8. BZOJ_3994_[SDOI2015]约数个数和_莫比乌斯反演

    BZOJ_3994_[SDOI2015]约数个数和_莫比乌斯反演 Description  设d(x)为x的约数个数,给定N.M,求   Input 输入文件包含多组测试数据. 第一行,一个整数T,表 ...

  9. 洛谷P3327 [SDOI2015]约数个数和 【莫比乌斯反演】

    题目 设d(x)为x的约数个数,给定N.M,求\(\sum_{i = 1}^{N} \sum_{j = 1}^{M} d(ij)\) 输入格式 输入文件包含多组测试数据.第一行,一个整数T,表示测试数 ...

随机推荐

  1. CSS3 clip-path 用法介绍

    一.基本概念 刷新 QQ 空间动态时,发现一则广告,随着用户上下滑动动态列表,就会自动切换广告图片,这样的效果对移动端本就不大的屏幕来说,无疑是很精妙的考虑,这样的效果是怎么实现的呢? 你可以点击这里 ...

  2. 底层剖析 Window 、Activity、 View 三者关系

    不管工作几年的 Android 工程师,或多或少都听说过 Window 的概念,并且隐隐约约感觉它在 Activity 与 View 之间应该发挥着某种连接的作用.但是如果需要说出这 3 者之间的关系 ...

  3. day67 前后端数据交互

    目录 一.前后端传输数据的编码格式(contentType) 1 form表单 2 ajax请求 二.ajax发送json格式数据 三.ajax发送文件 四.django自带的序列化组件(drf做铺垫 ...

  4. 外部应用复制 表格 到word中 设置表格自适应

    word 批量设置表格宽度自适应 描述 : 我们经常从 外部 如 excel,html 等其他文件 中复制的表格到word 文档 经常会出现在 word 中显示不全的问题 主要是源格式的表格 宽度比 ...

  5. JVM 专题十六:StringTable

    1. String的基本特性 String:字符串,使用一对""引起来表示. String声明为final的,不可被继承. String实现了Serializable接口:表示字符 ...

  6. scrapy 基础组件专题(九):scrapy-redis 源码分析

    下面我们来看看,scrapy-redis的每一个源代码文件都实现了什么功能,最后如何实现分布式的爬虫系统: connection.py 连接得配置文件 defaults.py 默认得配置文件 dupe ...

  7. 数据可视化之powerBI基础(十五)Power BI同步切片器,你知道怎么用吗?

    https://zhuanlan.zhihu.com/p/67932754 在PowerBI报表中,切片器绝对是最常用的控件了,利用它可以进行各种维度的动态切换,同一个页面中的所有图表可以同步响应:利 ...

  8. 机器学习实战基础(三十):决策树(三) DecisionTreeRegressor

    DecisionTreeRegressor class sklearn.tree.DecisionTreeRegressor (criterion=’mse’, splitter=’best’, ma ...

  9. 从零开始学Electron笔记(五)

    在之前的文章我们介绍了一下Electron的右键菜单的制作,接下来我们继续说一下Electron如何通过链接打开浏览器和嵌入网页. 现在有这样一个需求,我们要在我们的软件中加一个链接,然后点击该链接打 ...

  10. 绘图和可视化知识图谱-《利用Python进行数据分析》

    所有内容整理自<利用Python进行数据分析>,使用MindMaster Pro 7.3制作,emmx格式,源文件已经上传Github,需要的同学转左上角自行下载或者右击保存图片. 其他章 ...