题目链接

\(Description\)

  \(n\leq 10^{10}\),求

\[\sum_{i=1}^n\sum_{j=1}^ngcd(i,j)\ mod\ (1e9+7)
\]

\(Solution\)

  首先

\[\sum_{i=1}^n\sum_{j=1}^ngcd(i,j)=\sum_{d=1}^nd\sum_{i=1}^n\sum_{j=1}^n[gcd(i,j)=d]
\]

  注意不是\(\sum_{i=1}^n\sum_{j=1}^ngcd(i,j)=\sum_{d=1}^n\sum_{i=1}^n\sum_{j=1}^n[gcd(i,j)=d]\)!

\[ \begin{aligned}
\sum_{i=1}^n\sum_{j=1}^ngcd(i,j)&=\sum_{d=1}^nd\sum_{i=1}^n\sum_{j=1}^n[gcd(i,j)=d]\\
&=\sum_{d=1}^nd\sum_{i=1}^{\lfloor\frac{n}{d}\rfloor}\sum_{j=1}^{\lfloor\frac{n}{d}\rfloor}[gcd(i,j)=1]\\
&=\sum_{d=1}^nd\sum_{i=1}^{\lfloor\frac{n}{d}\rfloor}\mu(i)\lfloor\frac{\lfloor\frac{n}{d}\rfloor}{i}\rfloor\lfloor\frac{\lfloor\frac{n}{d}\rfloor}{i}\rfloor\\
&=\sum_{d=1}^nd\sum_{d|t,t\leq n}\mu(\frac{t}{d})(\lfloor\frac{n}{t}\rfloor)^2\\
&=\sum_{t=1}^n(\lfloor\frac{n}{t}\rfloor)^2\sum_{d|t}d\mu(\frac{t}{d})\\
&=\sum_{t=1}^n(\lfloor\frac{n}{t}\rfloor)^2\varphi(t)
\end{aligned}
\]

  然后就可以杜教筛了。

  最后一步用到$$\sum_{d|n}\frac{n}{d}\mu(d)=\varphi(n)$$

证明:

  首先有 \(\sum_{d|n}\varphi(d)=n\)(不证了).

  设 \(f(n)=n\),则\(f(n)=\sum_{d|n}\varphi(d)\).

  那么 \(\varphi(n)=\sum_{d|n}f(\frac{n}{d})\mu(d)\)

  即 \(\sum_{d|n}\frac{n}{d}\mu(d)=\varphi(n)\).

//前缀和不要忘取模。。
#include<cstdio>
#include<cstring>
typedef long long LL;
const int N=4500000,mod=1e9+7; int P[N>>2],cnt,phi[N+3];
LL n,sum[N+3],sum2[100000];
bool Not_P[N+3]; void Init()
{
phi[1]=1;
for(int i=2;i<=N;++i)
{
if(!Not_P[i]) P[++cnt]=i,phi[i]=i-1;
for(int j=1;j<=cnt&&i*P[j]<=N;++j)
{
Not_P[i*P[j]]=1;
if(i%P[j]) phi[i*P[j]]=phi[i]*(P[j]-1);
else {phi[i*P[j]]=phi[i]*P[j]; break;}
}
}
for(int i=1;i<=N;++i) sum[i]=sum[i-1]+phi[i], sum[i]>=mod?sum[i]-=mod:0;
}
LL FP(LL x,LL k)
{
LL t=1;
for(;k;k>>=1,x=x*x%mod)
if(k&1) t=t*x%mod;
return t;
}
const LL inv2=FP(2,mod-2);
LL Calc(LL x)
{
if(x<=N) return sum[x];
else if(~sum2[n/x]) return sum2[n/x];
LL t=x%mod, res=t*(t+1)%mod*inv2%mod;
for(LL i=2,las;i<=x;i=las+1)
las=x/(x/i),(res-=(las-i+1)*Calc(x/i)%mod)%=mod;
return sum2[n/x]=(res+mod)%mod;
} int main()
{
Init();//scanf("%I64d",&n);
scanf("%lld",&n);
memset(sum2,0xff,sizeof sum2);
LL res=0;
for(LL i=1,las,t;i<=n;i=las+1)
las=n/(n/i), t=n/i%mod, (res+=t*t%mod*(Calc(las)-Calc(i-1)+mod)%mod)%=mod;
printf("%lld",res); return 0;
}//9800581876

51Nod.1237.最大公约数之和 V3(莫比乌斯反演 杜教筛 欧拉函数)的更多相关文章

  1. 2019年南京网络赛E题K Sum(莫比乌斯反演+杜教筛+欧拉降幂)

    目录 题目链接 思路 代码 题目链接 传送门 思路 首先我们将原式化简: \[ \begin{aligned} &\sum\limits_{l_1=1}^{n}\sum\limits_{l_2 ...

  2. 51nod 1220 约数之和【莫比乌斯反演+杜教筛】

    首先由这样一个式子:\( d(ij)=\sum_{p|i}\sum_{q|j}[gcd(p,q)==1]\frac{pj}{q} \)大概感性证明一下吧我不会证 然后开始推: \[ \sum_{i=1 ...

  3. [复习]莫比乌斯反演,杜教筛,min_25筛

    [复习]莫比乌斯反演,杜教筛,min_25筛 莫比乌斯反演 做题的时候的常用形式: \[\begin{aligned}g(n)&=\sum_{n|d}f(d)\\f(n)&=\sum_ ...

  4. 【bzoj3930】[CQOI2015]选数 莫比乌斯反演+杜教筛

    题目描述 我们知道,从区间[L,H](L和H为整数)中选取N个整数,总共有(H-L+1)^N种方案.小z很好奇这样选出的数的最大公约数的规律,他决定对每种方案选出的N个整数都求一次最大公约数,以便进一 ...

  5. [BZOJ 3930] [CQOI 2015]选数(莫比乌斯反演+杜教筛)

    [BZOJ 3930] [CQOI 2015]选数(莫比乌斯反演+杜教筛) 题面 我们知道,从区间\([L,R]\)(L和R为整数)中选取N个整数,总共有\((R-L+1)^N\)种方案.求最大公约数 ...

  6. 51NOD 1237 最大公约数之和 V3 [杜教筛]

    1237 最大公约数之和 V3 题意:求\(\sum_{i=1}^n\sum_{j=1}^n(i,j)\) 令\(A(n)=\sum_{i=1}^n(n,i) = \sum_{d\mid n}d \c ...

  7. NOI 2016 循环之美 (莫比乌斯反演+杜教筛)

    题目大意:略 洛谷传送门 鉴于洛谷最近总崩,附上良心LOJ链接 任何形容词也不够赞美这一道神题 $\sum\limits_{i=1}^{N}\sum\limits_{j=1}^{M}[gcd(i,j) ...

  8. 51nod 1237 最大公约数之和 V3【欧拉函数||莫比乌斯反演+杜教筛】

    用mu写lcm那道卡常卡成狗(然而最后也没卡过去,于是写一下gcd冷静一下 首先推一下式子 \[ \sum_{i=1}^{n}\sum_{j=1}^{n}gcd(i,j) \] \[ \sum_{i= ...

  9. 51nod 1237 最大公约数之和 V3(杜教筛)

    [题目链接] https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1237 [题目大意] 求[1,n][1,n]最大公约数之和 ...

随机推荐

  1. 【ARTS】01_11_左耳听风-20190121~20190127

    ARTS: Algrothm: leetcode算法题目 Review: 阅读并且点评一篇英文技术文章 Tip/Techni: 学习一个技术技巧 Share: 分享一篇有观点和思考的技术文章 Algo ...

  2. 七、Sparse Autoencoder介绍

    目前为止,我们已经讨论了神经网络在有监督学习中的应用.在有监督学习中,训练样本是有类别标签的.现在假设我们只有一个没有带类别标签的训练样本集合  ,其中  .自编码神经网络是一种无监督学习算法,它使用 ...

  3. 实现开发板与ubuntu的共享--根文件系统NFS--Samba共享【sky原创】

    虚拟机要选择桥接,并且禁用有线和无线网卡,开启本地连接,本地连接属性要写如下:     ip地址是在连上板子后,windows   cmd  下  ipconfig得出的 板子的网线最好连接交换机或者 ...

  4. 如何用jQuery获得select的值

    如何用jQuery获得select的值,在网上找了看了一下,下面将总结一下: 1.获取第一个option的值        $('#test option:first').val(); 2.最后一个o ...

  5. GitHub提交代码后不显示用户名只显示邮箱

    提交完代码如图: 解决方案: 右键git bash here 输入命令如下: git config --global user.name "username" git config ...

  6. Http请求中请求头Content-Type讲解

    在Http请求中,我们每天都在使用Content-type来指定不同格式的请求信息,但是却很少有人去全面了解content-type中允许的值有多少,这里将讲解Content-Type的可用值 Med ...

  7. Linux查看文件命令

    linux查看日志文件内容命令有 cat 由第一行开始显示文件内容 tac 从最后一行开始显示,可以看出 tac 是 cat 的倒着写 nl 显示的时候,顺道输出行号! more 一页一页的显示文件内 ...

  8. Java基础99 待续

    1.待续 原创作者:DSHORE 作者主页:http://www.cnblogs.com/dshore123/ 原文出自:https://www.cnblogs.com/dshore123/p/107 ...

  9. 【docker】资料

    https://yeasy.gitbooks.io/docker_practice/content/network/linking.html

  10. PHP 获取时间

    1.获取系统当前时间 echo "date('Y-m-d',time())"; 2.获取系统前一天时间 echo "date("Y-m-d",strt ...