51nod 1238 最小公倍数之和 V3

\[\sum_{i=1}^N\sum_{j=1}^N lcm(i,j)
\]

\(N\leq 10^{10}\)

先按照套路推一波反演的式子:

\[Ans=\sum_{g=1}g\sum_{i=1}^{\frac{n}{g}}\sum_{j=1}^{\frac{n}{g}}ij\sum_{d|i,d|j}\mu(d)\\
=\sum_{g=1}g\sum_{d=1}^{\frac{n}{g}}d^2\mu(d)S^2(\frac{n}{dg})\\
=\sum_{T=1}^n\sum_{d|T}d^2\mu(d)\frac{T}{d}S^2(\frac{n}{T})\\
\]

难点在于求下面的函数的前缀和。

\[G(n)=\sum_{d|T}d^2\mu(d)\frac{T}{d}
\]

设:

\[A(n)=n^2\mu(n)\\
B(n)=n
\]

则:

\[G(n)=A*B
\]

其中\(*\)表示狄利克雷卷积。

考虑用杜教筛,也就是构造一个函数\(C(n)\),使得\(G*C\)有些美妙的性质。

考虑从\(A(n)=n^2\mu(n)\)下手,将\(n^2\)消掉,只留下\(\mu(n)\)。

设\(C(n)=n^2\),

\[A*C=\sum_{d|n}d^2\mu(d)(\frac{n}{d})^2\\
=n^2\sum_{d|n}\mu(d)\\
=[n==1]
\]

所以:

\[\begin{align}
G*C&=(A*C)*B\\
&=\epsilon *B\\
&=\sum_{d=1}[d==1]\frac{n}{d}\\
&=n
\end{align}
\]

然后就是杜教筛的套路:

\[\sum_{i=1}^n\sum_{d|n}G(n)(\frac{n}{d})^2=\sum_{i=1}^ni\\
\Rightarrow \sum_{i=1}^ni^2\sum_{j=1}^{\lfloor\frac{n}{i}\rfloor}G(j)=\frac{n*(n+1)}{2}\\
\Rightarrow \sum_{i=1}^ni^2S_G(\lfloor\frac{n}{i}\rfloor)=\frac{n*(n+1)}{2}\\
\Rightarrow S_G(n)=\frac{n*(n+1)}{2}-\sum_{i=2}^ni^2S_G(\lfloor\frac{n}{i}\rfloor)\\
\]

代码:

#include<bits/stdc++.h>
#define ll long long
#define maxx 3000005 using namespace std;
inline ll Get() {ll x=0,f=1;char ch=getchar();while(ch<'0'||ch>'9') {if(ch=='-') f=-1;ch=getchar();}while('0'<=ch&&ch<='9') {x=(x<<1)+(x<<3)+ch-'0';ch=getchar();}return x*f;} const ll mod=1e9+7; ll ksm(ll t,ll x) {
ll ans=1;
for(;x;x>>=1,t=t*t%mod)
if(x&1) ans=ans*t%mod;
return ans;
} ll n;
int p[maxx];
ll f[maxx];
bool vis[maxx];
const ll inv2=ksm(2,mod-2),inv6=ksm(6,mod-2);
ll cal(ll n) {return n*(n+1)%mod*inv2%mod;}
ll cal2(ll n) {return n*(n+1)%mod*(2*n+1)%mod*inv6%mod;} void pre(int n) {
for(int i=2;i<=n;i++) {
if(!vis[i]) p[++p[0]]=i,f[i]=1-i+mod;
for(int j=1;j<=p[0]&&1ll*i*p[j]<=n;j++) {
vis[i*p[j]]=1;
if(i%p[j]==0) {
f[i*p[j]]=f[i];
break;
}
f[i*p[j]]=(1-p[j])*f[i]%mod;
}
}
f[1]=1;
for(int i=1;i<=n;i++) {
f[i]=((f[i]*i+f[i-1])%mod+mod)%mod;
}
} map<ll,ll>st;
ll Sum(ll n) {
if(n<=3000000) return f[n];
if(st.find(n)!=st.end()) return st[n];
ll ans=cal(n%mod);
ll last=1;
for(ll i=2;i<=n;i=last+1) {
ll now=n/(n/i);
ans=(ans-(cal2(now%mod)-cal2(last%mod)+mod)*Sum(n/i)%mod+mod)%mod;
last=now;
}
return st[n]=ans;
} ll solve(ll n) {
ll ans=0;
ll last=0;
for(ll i=1;i<=n;i=last+1) {
ll now=n/(n/i);
(ans+=(Sum(now)-Sum(last)+mod)*cal(n/i%mod)%mod*cal(n/i%mod))%=mod;
last=now;
}
return ans;
} int main() {
pre(3000000);
n=Get();
cout<<solve(n);
return 0;
}

51nod 1238 最小公倍数之和 V3的更多相关文章

  1. 51NOD 1238 最小公倍数之和 V3 [杜教筛]

    1238 最小公倍数之和 V3 三种做法!!! 见学习笔记,这里只贴代码 #include <iostream> #include <cstdio> #include < ...

  2. 51nod 1238 最小公倍数之和 V3 【欧拉函数+杜教筛】

    首先题目中给出的代码打错了,少了个等于号,应该是 G=0; for(i=1;i<=N;i++) for(j=1;j<=N;j++) { G = (G + lcm(i,j)) % 10000 ...

  3. 51Nod 1238 最小公倍数之和V3

    题目传送门 分析: 现在我们需要求: \(~~~~\sum_{i=1}^{n}\sum_{j=1}^{n}lcm(i,j)\) \(=\sum_{i=1}^{n}\sum_{j=1}^{n}\frac ...

  4. 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= ...

  5. 【51nod】1238 最小公倍数之和 V3 杜教筛

    [题意]给定n,求Σi=1~nΣj=1~n lcm(i,j),n<=10^10. [算法]杜教筛 [题解]就因为写了这个非常规写法,我折腾了3天…… $$ans=\sum_{i=1}^{n}\s ...

  6. 51 NOD 1238 最小公倍数之和 V3

    原题链接 最近被51NOD的数论题各种刷……(NOI快到了我在干什么啊! 然后发现这题在网上找不到题解……那么既然A了就来骗一波访问量吧…… (然而并不怎么会用什么公式编辑器,写得丑也凑合着看吧…… ...

  7. 51 Nod 1238 最小公倍数之和 V3 杜教筛

    题目链接:http://www.51nod.com/Challenge/Problem.html#!#problemId=1238 题意:求$\sum_{i=1}^{n}\sum_{j=1}^{n}l ...

  8. [51Nod 1238] 最小公倍数之和 (恶心杜教筛)

    题目描述 求∑i=1N∑j=1Nlcm(i,j)\sum_{i=1}^N\sum_{j=1}^Nlcm(i,j)i=1∑N​j=1∑N​lcm(i,j) 2<=N<=10102<=N ...

  9. 【学术篇】51nod 1238 最小公倍数之和

    这是一道杜教筛的入(du)门(liu)题目... 题目大意 求 \[ \sum_{i=1}^n\sum_{j=1}^nlcm(i,j) \] 一看就是辣鸡反演一类的题目, 那就化式子呗.. \[ \s ...

随机推荐

  1. ASP.NET登录验证

    protected void btnLogin_Click(object sender, EventArgs e) { string username = txtUserName.Value.Trim ...

  2. [android] 开启新的activity获取他的返回值

    应用场景:打开一个新的activity,在这个activity上获取数据,返回给打开它的界面 短信发送时,可以直接选择系统联系人 界面布局是一个线性布局,里面右侧选择联系人在EditText的右上,因 ...

  3. spring_05装配bean

    一.前言 <bean id="user1" scope="singleton" init-method="myInit" destro ...

  4. python基础学习(十三)函数进阶

    目录 1. 函数参数和返回值的作用 1.1 无参数,无返回值 1.2 无参数,有返回值 1.3 有参数,无返回值 1.4 有参数,有返回值 2. 函数的返回值进阶 例子:显示当前的湿度和温度 例子:交 ...

  5. Docker 系列一(概念原理和安装).

    一.概念原理 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间 ...

  6. Java 原生网络编程.

    一.概念 Java 语言从其诞生开始,就和网络紧密联系在一起.在 1995 年的 Sun World 大会上,当时占浏览器市场份额绝对领先的网景公司宣布在浏览器中支持Java,从而引起一系列的公司产品 ...

  7. jQuery 事件 - ready() 方法

    转载:http://www.w3school.com.cn/jquery/jquery_hide_show.asp 实例 在文档加载后激活函数: $(document).ready(function( ...

  8. java程序存入数据库中文乱码解决方案

    一.问题描述 背景:代码迁移,ssm框架在插入数据到mysql数据库时,中文乱码.代码中的编码配置没有问题,因为该项目代码以前使用过,没有问题.现在换了数据库,数据库配置也做了修改,统一使用utf8, ...

  9. SAP MM MM17里不能修改物料主数据'Purchasing Value Key'字段值?

    SAP MM MM17里不能修改物料主数据'Purchasing Value Key'字段值? 记得在D项目上线之前数据导入系统之后,业务提出一些物料采购视图里的’Purchasing value k ...

  10. Android为TV端助力 转载:android自定义view实战(温度控制表)!

    效果图 package cn.ljuns.temperature.view; import com.example.mvp.R; import android.content.Context;impo ...