Lucas的数论:杜教筛,莫比乌斯反演
Description:
求$\sum\limits_{i=1}^{n} \sum\limits_{j=1}^{n} d(i \times j)$
$d(i)$表示$i$的约数个数和。$n \leq 10^9$
废话:
好久没有做反演了感觉自己都不会了。。。
做了一遍发现自己真的不会了
手推了不知道多久终于推出了式子中间还错了一遍打了一半发现过不去样例
题解:
标签都知道了那也就没什么好说的了,直接上式子(类比《约数个数和》那道题)(以下分数皆表示整除向下取整)
$\sum\limits_{i=1}^{n} \sum\limits_{j=1}^{n} d(i \times j)$
$=\sum\limits_{i=1}^{n} \sum\limits_{j=1}^{n} \sum\limits_{a|i} \sum\limits_{b|j} [gcd(a,b)==1] $
$=\sum\limits_{i=1}^{n} \sum\limits_{j=1}^{n} \sum\limits_{a|i} \sum\limits_{b|j} \sum\limits_{d|a \ and \ d|b} \mu (d) $
$=\sum\limits_{d=1}^{n} \mu (d) \sum\limits_{a=1}^{\frac{n}{d}} \sum\limits_{b=1}^{\frac{n}{d}} \frac{\frac{n}{d}}{a} \frac{\frac{n}{d}}{b}$
$=\sum\limits_{d=1}^{n} \mu (d) (\sum\limits_{i=1}^{\frac{n}{d}} \frac{\frac{n}{d}}{i})^2$
然后第二个$\sum$后面的东西视作函数$f(\frac{n}{d})$,可以整除分块,前面就是杜教筛得到$\mu$的前缀和
然后函数$f(\frac{n}{d})$的求值其实也就是一个整除分块。
其实$f(x)=\sum\limits_{i=1}^{x} d(i)$即$\sum\limits_{i=1}^{x} d(i) =\sum\limits_{i=1}^{x} \frac{x}{i}$
这里的$d(x)$函数也是约数个数的意思。%%%LrefraiNC
从含义上也可以理解。所以$f(x)$函数也可以杜教筛。但是我还没有做过$d(i)$的杜教筛所以我没有打。
杜教筛线筛预处理的范围应该在$n^{\frac{2}{3}}=10^6$不然慢的要死(虽说没有T)
#include<cstdio>
#define mod 1000000007
struct hash_map{
int w[],fir[],l[],to[],cnt;
int &operator[](int x){
int r=x%;
for(int i=fir[r];i;i=l[i])if(to[i]==x)return w[i];
l[++cnt]=fir[r];fir[r]=cnt;to[cnt]=x;return w[cnt]=-;
}
}M;
int p[],mu[],pc;char np[];
int sum(int n){
if(n<=)return mu[n];
if(M[n]!=-)return M[n];
int a=;
for(int l=,r,A;l<=n;l=r+)A=n/l,r=n/A,a-=sum(A)*(r-l+);
return M[n]=a;
}
long long cal(int x,long long ans=){
for(int l=,r,a;l<=x;l=r+)a=x/l,r=x/a,ans=(ans+a*(r-l+1ll))%mod;
return ans*ans%mod;
}
int main(){
mu[]=;
for(int i=;i<=;++i){
if(!np[i])p[++pc]=i,mu[i]=-;
for(int j=;j<=pc&&i*p[j]<=;++j)
if(i%p[j])mu[i*p[j]]=-mu[i],np[i*p[j]]=-;
else np[i*p[j]]=-;
mu[i]+=mu[i-];
}
int n;long long ans=;scanf("%d",&n);
for(int l=,r,a;l<=n;l=r+)a=n/l,r=n/a,ans+=1ll*cal(a)*(sum(r)-sum(l-))%mod;
printf("%lld\n",(ans%mod+mod)%mod);
}
Lucas的数论:杜教筛,莫比乌斯反演的更多相关文章
- [bzoj 4176] Lucas的数论 (杜教筛 + 莫比乌斯反演)
题面 设d(x)d(x)d(x)为xxx的约数个数,给定NNN,求 ∑i=1N∑j=1Nd(ij)\sum^{N}_{i=1}\sum^{N}_{j=1} d(ij)i=1∑Nj=1∑Nd(ij) ...
- 【XSY2731】Div 数论 杜教筛 莫比乌斯反演
题目大意 定义复数\(a+bi\)为整数\(k\)的约数,当且仅当\(a\)和\(b\)为整数且存在整数\(c\)和\(d\)满足\((a+bi)(c+di)=k\). 定义复数\(a+bi\)的实部 ...
- BZOJ_4176_Lucas的数论_杜教筛+莫比乌斯反演
BZOJ_4176_Lucas的数论_杜教筛+莫比乌斯反演 Description 去年的Lucas非常喜欢数论题,但是一年以后的Lucas却不那么喜欢了. 在整理以前的试题时,发现了这样一道题目“求 ...
- 【BZOJ4176】Lucas的数论-杜教筛
求$$\sum\limits_{i=1}^{n}\sum\limits_{j=1}^{n}f(ij)$$,其中$f(x)$表示$x$的约数个数,$0\leq n\leq 10^9$,答案膜$10^9+ ...
- bzoj 4176: Lucas的数论 -- 杜教筛,莫比乌斯反演
4176: Lucas的数论 Time Limit: 30 Sec Memory Limit: 256 MB Description 去年的Lucas非常喜欢数论题,但是一年以后的Lucas却不那么 ...
- BZOJ 4176: Lucas的数论 [杜教筛]
4176: Lucas的数论 题意:求\(\sum_{i=1}^n \sum_{j=1}^n \sigma_0(ij)\) \(n \le 10^9\) 代入\(\sigma_0(nm)=\sum_{ ...
- [CQOI2015][bzoj3930] 选数 [杜教筛+莫比乌斯反演]
题面: 传送门 思路: 首先我们把区间缩小到$\left[\lfloor\frac{L-1}{K}\rfloor,\lfloor\frac{R}{K}\rfloor\right]$ 这道题的最特殊的点 ...
- [51Nod 1237] 最大公约数之和 (杜教筛+莫比乌斯反演)
题目描述 求∑i=1n∑j=1n(i,j) mod (1e9+7)n<=1010\sum_{i=1}^n\sum_{j=1}^n(i,j)~mod~(1e9+7)\\n<=10^{10}i ...
- bzoj4176. Lucas的数论 杜教筛
题意:求\(\sum_{i=1}^n\sum_{j=1}^nd(ij),d是约数个数函数\) 题解:首先有一个结论\(d(ij)=\sum_{x|i}\sum_{y|j}[(i,j)==1]\) 那么 ...
- bzoj 4916: 神犇和蒟蒻 (杜教筛+莫比乌斯反演)
题目大意: 读入n. 第一行输出“1”(不带引号). 第二行输出$\sum_{i=1}^n i\phi(i)$. 题解: 所以说那个$\sum\mu$是在开玩笑么=.= 设$f(n)=n\phi(n) ...
随机推荐
- 确认自己所用的python版本
总结: 目前有两个版本的python处于活跃状态:python2,python3 有多种流行的python运行环境:cpython(应用最广泛的python解释器,如无对解释器有要求,一般用这个,默认 ...
- redis相关缓存知识
Redis redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合).zset(sorte ...
- docker镜像制作必备技能
正文 使用过docker的都知道dockerfile,其用于定义制作镜像的流程,由一系列命令和参数构成的脚本,这些命令应用于基础镜像并最终创建一个新的镜像.可参考往期文章学习:docker基础知识整理 ...
- Vue核心知识——computed和watch的细节全面分析
computed和watch的区别 computed特性 1.是计算值,2.应用:就是简化tempalte里面{{}}计算和处理props或$emit的传值,computed(数据联动).3.具有缓存 ...
- 【THE LAST TIME】this:call、apply、bind
前言 The last time, I have learned [THE LAST TIME]一直是我想写的一个系列,旨在厚积薄发,重温前端. 也是给自己的查缺补漏和技术分享. 欢迎大家多多评论指点 ...
- idea配置maven以及手动添加webapp目录
idea配置maven 点击右下角Configure 点击settings 3 . 设置路径 设置自动导包 4 . 点击创建新工程 5 . 选择maven点击下一步 6 . 7 . 8 . 此时,创建 ...
- 利用golang优雅的实现单实例
平时编写代码过程中,经常会遇到对于全局角度只需运行一次的代码,比如全局初始化操作,设计模式中的单例模式.针对单例模式,java中又出现了饿汉模式.懒汉模式,再配合synchronized同步关键字来实 ...
- 张高兴的 .NET Core IoT 入门指南:(五)串口通信入门
在开始之前,首先要说明的是串口通信所用到的 SerialPort 类并不包含在 System.Device.Gpio NuGet 包中,而是在 System.IO.Ports NuGet 包中.之所以 ...
- django中app分组
08.13自我总结 django中app分组 一.django路由系统app进行分组 1.创建app 使用pycharm创建django的时候, 加上app的名字,后续多个app只需复制粘贴之前app ...
- Python_三元运算与lambda表达式
[是什么] 三元运算是if...else...的简化版,lambda表达式是函数的简化版 三元运算(三目运算) # 判断两个数中的较大者 fun(a1,a2): return a1 if a1> ...