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. 5年前端经验小伙伴教你纯css3实现饼状图

    有一些网页中,有时候会碰到饼状图的需求,比如统计图表,进度指示器,定时器等,实现方式也是各种各样,现在也有不少现成的js库,可以直接拿来使用,方便很多.这里笔者为大家演示一种纯css实现饼状图效果的方 ...

  2. 你从来没了解过的CSS浮动

    浮动到底是做什么呢?他们是如何影响相关元素的盒模型的呢?浮动的元素与内联元素有什么不同呢?制定浮动元素的位置的具体规则是什么?clear属性是如何工作的,并且它的作用是什么? 即使是经验丰富的开发者也 ...

  3. (二)ELK Filebeat简介

    Filebeat简介   轻量级的日志传输工具,是一个日志文件托运工具,在你的服务器上安装客户端后,filebeat会监控日志目录或者指定的日志文件,追踪读取这些文件(追踪文件的变化,不停的读),并且 ...

  4. laravel7使用auth进行用户认证

    原文地址:https://www.wjcms.net/archives/laravel7使用auth进行用户认证 laravel7 版本移除了 auth,大家都知道以前版本是直接使用 php arti ...

  5. for循环与嵌套(水仙花数与三角形的打印)

    ## 一.for循环语法:for(开始区间: 结束区间; 修改循环条件){ 循环体:} > 开始区间:初始化表达式(确定开始)int i = 1; > 结束区间:逻辑表达式(确定结束) i ...

  6. DVWA学习记录 PartⅠ

    DVWA介绍 DVWA(Damn Vulnerable Web Application)是一个用来进行安全脆弱性鉴定的PHP/MySQL Web应用,旨在为安全专业人员测试自己的专业技能和工具提供合法 ...

  7. element-ui的upload组件的clearFiles方法的调用

    element-ui使用中碰到的问题 <template> <div> <el-button @click="clearFiles">重新上传& ...

  8. python positional argument follows keyword argument

    关键字参数必须跟随在位置参数后面! 因为python函数在解析参数时, 是按照顺序来的, 位置参数是必须先满足, 才能考虑其他可变参数.

  9. java 面向对象(十九):关键字:static

    static:静态的1.可以用来修饰的结构:主要用来修饰类的内部结构属性.方法.代码块.内部类2.static修饰属性:静态变量(或类变量) 2.1 属性,是否使用static修饰,又分为:静态属性 ...

  10. JavaScript动画实例:动感小球

    已知圆的坐标方程为: X=R*SIN(θ) Y=R*COS(θ)     (0≤θ≤2π) 将0~2π区间等分48段,即设定间隔dig的值为π/24.θ初始值从0开始,按曲线方程求得坐标值(x,y), ...