●BZOJ 4176 Lucas的数论
题链:
http://www.lydsy.com/JudgeOnline/problem.php?id=4176
题解:
莫比乌斯反演,杜教筛
首先有这么一个结论:
令d(n)表示n的约数的个数(就是题目中的f(n)),则有
$$d(nm)=\sum_{i|n}\sum_{j|m}[gcd(i,j)==1]$$
●BZOJ 3994 [SDOI2015]约数个数和也用到了这个东西。
那么就下来接直接进行求ANS的式子的推导:
$$\begin{aligned}
ANS&=\sum_{n=1}^{N}\sum_{m=1}^{N}d(nm)\\
&=\sum_{n=1}^{N}\sum_{m=1}^{N}\sum_{i|n}\sum_{j|m}[gcd(i,j)==1]\\
&=\sum_{n=1}^{N}\sum_{m=1}^{N}\sum_{i|n}\sum_{j|m}\sum_{d|gcd(i,j)}\mu(d)\\
&=\sum_{d=1}^{N}\mu(d)\sum_{d|i}\sum_{d|j}\sum_{i|n,n\leq N}\sum_{j|m,m\leq N} 1\\
&=\sum_{d=1}^{N}\mu(d)(\sum_{d|i}\lfloor \frac{N}{i} \rfloor)^2\\
&=\sum_{d=1}^{N}\mu(d)(\sum_{i=1}^{\lfloor \frac{N}{d} \rfloor}\lfloor \frac{N}{id} \rfloor)^2\end{aligned}$$
令$$f(n)=\sum_{i=1}^{n}\lfloor \frac{n}{i} \rfloor$$
则$$ANS=\sum_{d=1}^{N}\mu(d)f(\lfloor \frac{N}{d} \rfloor)^2$$
这个求ANS的式子是可以分块+杜教筛(求每块$\mu$的和)做的,
同时求f也可以分块求,
即这是一个块套块。。。
代码:
#include<bits/stdc++.h>
#define DJM /*5623413*/ 1000000
using namespace std;
const int mod=1000000007;
struct Hash_Table{
#define Hmod 1425367
int org[DJM],val[DJM],nxt[DJM],head[Hmod],hnt;
Hash_Table(){hnt=1;}
void Push(int x,int v){
static int u; u=x%Hmod;
org[hnt]=x; val[hnt]=v; nxt[hnt]=head[u]; head[u]=hnt++;
}
int Find(int x){
static int u; u=x%Hmod;
for(int i=head[u];i;i=nxt[i])
if(org[i]==x) return val[i];
return -1;
}
}H;
int pmu[DJM+50],mu[DJM+50];
void Sieve(){
static bool np[DJM+50];
static int prime[DJM+50],pnt;
mu[1]=1;
for(int i=2;i<=DJM;i++){
if(!np[i]) prime[++pnt]=i,mu[i]=-1;
for(int j=1;j<=pnt&&i<=DJM/prime[j];j++){
np[i*prime[j]]=1;
if(i%prime[j]) mu[i*prime[j]]=-mu[i];
else break;
}
}
for(int i=1;i<=DJM;i++)
pmu[i]=(1ll*mod+pmu[i-1]+mu[i])%mod;
}
int f(int n){
int ret=0;
for(int i=1,last;i<=n;i=last+1){
last=n/(n/i);
ret=(1ll*ret+1ll*(last-i+1)*(n/i))%mod;
}
return ret;
}
int DJ_pmu(int n){
if(n<=DJM) return pmu[n];
if(H.Find(n)!=-1) return H.Find(n);
int ret=1;
for(int i=2,last;i<=n;i=last+1){
last=n/(n/i);
ret=(1ll*ret+mod-1ll*(last-i+1)*DJ_pmu(n/i)%mod)%mod;
}
H.Push(n,ret);
return ret;
}
int main(){
Sieve(); int n,ans=0;
scanf("%d",&n);
for(int d=1,tmp,last;d<=n;d=last+1){
last=n/(n/d); tmp=f(n/d);
tmp=1ll*tmp*tmp%mod;
ans=(1ll*ans+(1ll*DJ_pmu(last)-DJ_pmu(d-1)+mod)%mod*tmp%mod)%mod;
}
printf("%d\n",ans);
return 0;
}
●BZOJ 4176 Lucas的数论的更多相关文章
- bzoj 4176 Lucas的数论
bzoj 4176 Lucas的数论 和约数个数和那题差不多.只不过那个题是多组询问,这题只询问一次,并且 \(n\) 开到了 \(10^9\). \[ \begin{align*} \sum_{i= ...
- Mobius反演与积性函数前缀和演学习笔记 BZOJ 4176 Lucas的数论 SDOI 2015 约数个数和
下文中所有讨论都在数论函数范围内开展. 数论函数指的是定义域为正整数域, 且值域为复数域的函数. 数论意义下的和式处理技巧 因子 \[ \sum_{d | n} a_d = \sum_{d | n} ...
- BZOJ 4176: Lucas的数论 [杜教筛]
4176: Lucas的数论 题意:求\(\sum_{i=1}^n \sum_{j=1}^n \sigma_0(ij)\) \(n \le 10^9\) 代入\(\sigma_0(nm)=\sum_{ ...
- bzoj 4176: Lucas的数论 -- 杜教筛,莫比乌斯反演
4176: Lucas的数论 Time Limit: 30 Sec Memory Limit: 256 MB Description 去年的Lucas非常喜欢数论题,但是一年以后的Lucas却不那么 ...
- 【刷题】BZOJ 4176 Lucas的数论
Description 去年的Lucas非常喜欢数论题,但是一年以后的Lucas却不那么喜欢了. 在整理以前的试题时,发现了这样一道题目"求Sigma(f(i)),其中1<=i< ...
- [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) ...
- BZOJ 4176 Lucas的数论 莫比乌斯反演+杜教筛
题意概述:求,n<=10^9,其中d(n)表示n的约数个数. 分析: 首先想要快速计算上面的柿子就要先把d(ij)表示出来,有个神奇的结论: 证明:当且仅当a,b没有相同的质因数的时候我们统计其 ...
- bzoj 4176: Lucas的数论【莫比乌斯反演+杜教筛】
首先由这样一个结论: \[ d(ij)=\sum_{p|i}\sum_{q|j}[gcd(p,q)==1] \] 然后推反演公式: \[ \sum_{i=1}^{n}\sum_{j=1}^{n}\su ...
- Lucas的数论题解
Lucas的数论 reference 题目在这里> < Pre 数论分块 默认向下取整时. 形如\(\sum\limits_{i=1}^n f\left( \frac{n}{i}\righ ...
随机推荐
- 【Swift】iOS裁剪或者压缩后出现的白边问题
只需要将所有的CGFloat转化为NSInteger即可 func imageScaleSize(newSize: CGSize) -> UIImage{ let width = NSInteg ...
- class AClass<E extends Comparable>与class AClass<E extends Comaprable<E>>有什么区别?
new ArrayList<>()与new ArrayList()一样 都是为了做限定用的 如果不了解你可以看API 这个Comparable里面有一个方法compareTo(T o) 如 ...
- RxSwift 函数响应式编程
Max 在 Boston 上学,在 San Francisco 工作,是一名软件工程师及创业者.当他还在高中的时候就在一家创业公司工作了,他非常喜欢使用 iOS.Android 以及 JavaScri ...
- Log4j详细教程
一.入门实例 1.新建一个JAva工程,导入包log4j-1.2.17.jar,整个工程最终目录如下 2.src同级创建并设置log4j.properties ### 设置### log4j.root ...
- [Android]上传到多个Maven仓库的Gradle插件RapidMavenPushPlugin
博客搬迁至https://blog.wangjiegulu.com RSS订阅:https://blog.wangjiegulu.com/feed.xml RapidMavenPushPlugin 用 ...
- Ubuntu安装使用latex
TeX Live is a TeX distribution to get up and running with the TeX document production system. To ins ...
- 消除ExtJS6的extjs-trila字样
- New UWP Community Toolkit - AdaptiveGridView
概述 UWP Community Toolkit 中有一个自适应的 GridView 控件 - AdaptiveGridView,本篇我们结合代码详细讲解 AdaptiveGridView 的实现 ...
- 优化从 App.config 读取配置文件
public class AppSettingsConfig { /// <summary> ////// </summary> public static int Query ...
- linux下的Shell编程(3)shell里的流程控制
if 语句 if 表达式如果条件命令组为真,则执行 then 后的部分.标准形式: if 判断命令,可以有很多个,真假取最后的返回值 then 如果前述为真做什么 [ # 方括号代表可选,别真打进去了 ...