https://scut.online/p/114

\(A(n)=\sum\limits_{i=1}^{n} \frac{lcm(i,n)}{gcd(i,n)}\)

\(=\sum\limits_{i=1}^{n} \frac{in}{gcd^2(i,n)}\)

枚举g:

\(A(n)=n\sum\limits_{g|n}\frac{1}{g^2} \sum\limits_{i=1}^{n} i [gcd(i,n)==g]\)

最内层除以g:

\(A(n)=n\sum\limits_{g|n}\frac{1}{g} \sum\limits_{i=1}^{\frac{n}{g}} i [gcd(i,\frac{n}{g})==1]\)

考虑里面的:

\(B(n)=\sum\limits_{i=1}^{n} i [gcd(i,n)==1]\)

显然:

\(B(n)=\frac{1}{2}n([n==1]+\varphi(n))\)

代回 \(A(n)\) 里面:

\(A(n)=\sum\limits_{g|n}\frac{n}{g} B(\frac{n}{g})\)

\(=\sum\limits_{g|n} g B(g)\)

\(=\frac{1}{2}(1+\sum\limits_{g|n} g^2 \varphi(g))\)

代回 \(S(n)\) 里面:

$S(n)=\sum\limits_{i=1}^{n} A(i) \(
\)= \sum\limits_{i=1}^{n} \frac{1}{2}(1+\sum\limits_{g|i} g^2 \varphi(g))\(
\)= \frac{n}{2}+\frac{1}{2}\sum\limits_{i=1}^{n}\sum\limits_{g|i} g^2 \varphi(g)$

记:

\(C(n)=\sum\limits_{i=1}^{n}\sum\limits_{g|i} g^2 \varphi(g)\)

显然:

\(C(n)=\sum\limits_{d=1}^{n}d^2 \varphi(d) \lfloor\frac{n}{d}\rfloor\)

后面是一个分块,前面是个杜教筛。然后我们召唤鹏哥就可以通过这道题了。

转化为快速求 $\sum\limits_{i=1}^{n} i^2 \varphi(i) $,卷一个id平方然后查鹏哥的cheatsheet过了。

#include<bits/stdc++.h>
using namespace std;
typedef long long ll; const int mod=1e9+7;
const int inv2=(mod+1)>>1;
const int MAXN=4e6; int pri[MAXN+1];
int &pritop=pri[0];
ll B[MAXN+1];
ll PrefixB[MAXN+1];
int pk[MAXN+1]; void sieve(int n=MAXN) {
pk[1]=1;
B[1]=1;
for(int i=2; i<=n; i++) {
if(!pri[i]) {
pri[++pritop]=i;
pk[i]=i;
ll tmp=1ll*i*i;
//.
if(tmp>=mod)
tmp%=mod;
B[i]=tmp*(i-1);
if(B[i]>=mod)
B[i]%=mod;
//.
}
for(int j=1; j<=pritop; j++) {
int &p=pri[j];
int t=i*p;
//.
if(t>n)
break;
pri[t]=1;
if(i%p) {
pk[t]=p;
B[t]=B[i]*B[p];
if(B[t]>=mod)
B[t]%=mod;
//.
} else {
pk[t]=pk[i]*p;
if(pk[t]==t) {
ll tmp=1ll*t*t;
if(tmp>=mod)
tmp%=mod;
B[t]=tmp*(t-i); if(B[t]>=mod)
B[t]%=mod;
//.
} else {
B[t]=B[t/pk[t]]*B[pk[t]];
if(B[t]>=mod)
B[t]%=mod;
}
break;
}
}
}
for(int i=1; i<=n; i++) {
PrefixB[i]=PrefixB[i-1]+B[i];
if(PrefixB[i]>=mod)
PrefixB[i]-=mod;
}
} inline int phi(int n) {
int res=n;
for(int i=1; i<=pritop&&pri[i]*pri[i]<=n; i++) {
if(n%pri[i]==0) {
res-=res/pri[i];
while(n%pri[i]==0)
n/=pri[i];
}
if(n==1)
return res;
}
res-=res/n;
return res;
//.
} inline ll qpow(ll x,int n) {
ll res=1;
while(n) {
if(n&1) {
res*=x;
if(res>=mod)
res%=mod;
}
x*=x;
if(x>=mod)
x%=mod;
n>>=1;
}
return res;
} int inv4=qpow(4,mod-2);
int inv6=qpow(6,mod-2); inline ll s2(ll n) {
ll tmp=n*(n+1);
if(tmp>=mod)
tmp%=mod;
tmp*=(n*2+1);
if(tmp>=mod)
tmp%=mod;
tmp*=inv6;
if(tmp>=mod)
tmp%=mod;
return tmp;
} inline ll s3(ll n) {
ll tmp=n*(n+1);
if(tmp>=mod)
tmp%=mod;
tmp*=tmp;
if(tmp>=mod)
tmp%=mod;
tmp*=inv4;
if(tmp>=mod)
tmp%=mod;
return tmp;
} unordered_map<int,ll> PB; inline ll S(int n) {
if(n<=MAXN)
return PrefixB[n];
if(PB.count(n))
return PB[n];
ll ret=s3(n);
for(int l=2,r; l<=n; l=r+1) {
int t=n/l;
r=n/t;
ll tmp=s2(r)-s2(l-1);
if(tmp<0)
tmp+=mod;
tmp*=S(t);
if(tmp>=mod)
tmp%=mod;
ret-=tmp;
if(ret<0)
ret+=mod;
}
return PB[n]=ret;
} inline ll Prefix(int l,int r) {
l--;
ll PL=S(l);
ll PR=S(r);
ll res=PR-PL;
if(res<0)
res+=mod;
return res;
} inline ll P(int n) {
ll res=0;
for(int l=1,r; l<=n; l=r+1) {
int t=n/l;
r=n/t;
ll tmp=1ll*t*Prefix(l,r);
if(tmp>=mod)
tmp%=mod;
res+=tmp;
if(res>=mod)
res-=mod;
}
return res;
} inline ll Ans(int n) {
ll res=(1ll*n*inv2)%mod;
res+=(P(n)*inv2)%mod;
return res%mod;
} int main() {
#ifdef Yinku
freopen("Yinku.in","r",stdin);
#endif // Yinku
sieve();
int n;
while(~scanf("%d",&n)) {
printf("%lld\n",Ans(n));
}
return 0;
}

SCUT - 114 - 作业之数学篇 - 杜教筛的更多相关文章

  1. SCUT - 354 - CC的简单多项式 - 杜教筛

    https://scut.online/p/354 跟多项式一点关系都没有. 注意到其实两个多项式在1处求值,那么就是他们的系数加起来. 列一列发现系数就是n以内两两求gcd的值,还自动把0去掉了. ...

  2. 51Nod 1238 - 最小公倍数之和 V3(毒瘤数学+杜教筛)

    题目 戳这里 推导 ∑i=1n∑j=1nlcm(i,j)~~~\sum_{i=1}^{n}\sum_{j=1}^{n}lcm(i,j)   ∑i=1n​∑j=1n​lcm(i,j) =∑i=1n∑j= ...

  3. 杜教筛进阶+洲阁筛讲解+SPOJ divcnt3

    Part 1:杜教筛进阶在了解了杜教筛基本应用,如$\sum_{i=1}^n\varphi(i)$的求法后,我们看一些杜教筛较难的应用.求$\sum_{i=1}^n\varphi(i)*i$考虑把它与 ...

  4. hihocoder #1456 : Rikka with Lattice(杜教筛)

    hihocoder #1456 : Rikka with Lattice(杜教筛) 题意 : 给你一个\(n*m\)方格图,统计上面有多少个格点三角形,除了三个顶点,不覆盖其他的格点(包括边和内部). ...

  5. 卷积 & 杜教筛

    目录 卷积 杜教筛 前言:发现最近都没怎么写博客,,,赶紧发篇以前记的笔记凑凑数 卷积 卷积定义: 如果有数论函数\(f, g\), 那么它们卷积的第\(n\)项为\((f * g) (n)\),设这 ...

  6. 【CCPC-Wannafly Winter Camp Day3 (Div1) F】小清新数论(莫比乌斯反演+杜教筛)

    点此看题面 大致题意: 让你求出\(\sum_{i=1}^n\sum_{j=1}^n\mu(gcd(i,j))\). 莫比乌斯反演 这种题目,一看就是莫比乌斯反演啊!(连莫比乌斯函数都有) 关于莫比乌 ...

  7. 【知识总结】线性筛_杜教筛_Min25筛

    首先感谢又强又嘴又可爱脸还筋道的国家集训队(Upd: WC2019 进候选队,CTS2019 不幸 rk6 退队)神仙瓜 ( jumpmelon ) 给我讲解这三种筛法~~ 由于博主的鸽子属性,这篇博 ...

  8. Mobius 反演与杜教筛

    积性函数 积性函数 指对于所有互质的整数 aaa 和 bbb 有性质 f(ab)=f(a)f(b)f(ab)=f(a)f(b)f(ab)=f(a)f(b) 的数论函数. 特别地,若所有的整数 aaa ...

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

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

随机推荐

  1. 第 3 章 第 1 题 精简冗余 if 语句问题 使用数组实现

    问题分析 输入:用户个人收入 输出:该用户要缴纳的个人所得税 约束:不允许使用过多的 if 语句 解答思路 最简单的方法是根据不同的税率区间,创建多个 if 语句来求解.但如此一来便会有 25 个 i ...

  2. 游戏开发之基础图像---3d图像处理

    http://dev.gameres.com/Program/Visual/3D/3Darit.htm float 类型数据有效数字是小数点后面6位 单精度 doluble 类型数据是至少10位,双精 ...

  3. 基于chyh1990/caffe-compact在windows vs2013上编译caffe步骤

    1.      从https://github.com/chyh1990/caffe-compact下载caffe-compact代码: 2.      通过CMake(cmake-gui)生成vs2 ...

  4. 安装Ubuntn 和 pycharm

    Ubuntu安装之python开发   什么??公司要用Ubuntu(乌班图)?不会用??怎么进行python开发??? 乌班图操作系统下载地址:http://releases.ubuntu.com/ ...

  5. EasyDarwin手机直播是如何实现的快速显示视频的方法

    前言 经常有人提到最近比较火的映客直播.花椒直播这种,是如何做到在打开手机直播中的某一个主播房间后,立即就能显示出主播视频,非常非常快,而且延时也比较小,是怎么做到的? 其实,这并不是什么高深的技术, ...

  6. Hibernate表关系映射之一对一映射

    一.数据表的映射关系 在数据库领域中,数据表和数据表之间关系一般可以分为如下几种: 一对一:比如公民和身份证的关系,一个人只有一张身份证,同时每张身份证也仅仅对应一个人! 一对多:比如客户和订单之间的 ...

  7. 从TFS中的现有项目复制一份作为新项目,导致提交的服务器无法加载

    解决方案: 1.编辑 .csproj文件,改为自己的名字 2.取消解绑

  8. 记一次FastJSON和Jackson解析json时遇到的中括号问题

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/jadyer/article/details/24395015 完整版见https://jadyer. ...

  9. 修改mysql的root的密码

    首先用root账号登陆phpmyadmin,然后点击左侧的mysql,然后选择进入mysql数据库,输入以下命令:update user set password=password('123456') ...

  10. Codeforces Round #417 (Div. 2) B. Sagheer, the Hausmeister —— DP

    题目链接:http://codeforces.com/problemset/problem/812/B B. Sagheer, the Hausmeister time limit per test ...