题链:

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的数论的更多相关文章

  1. bzoj 4176 Lucas的数论

    bzoj 4176 Lucas的数论 和约数个数和那题差不多.只不过那个题是多组询问,这题只询问一次,并且 \(n\) 开到了 \(10^9\). \[ \begin{align*} \sum_{i= ...

  2. Mobius反演与积性函数前缀和演学习笔记 BZOJ 4176 Lucas的数论 SDOI 2015 约数个数和

    下文中所有讨论都在数论函数范围内开展. 数论函数指的是定义域为正整数域, 且值域为复数域的函数. 数论意义下的和式处理技巧 因子 \[ \sum_{d | n} a_d = \sum_{d | n} ...

  3. BZOJ 4176: Lucas的数论 [杜教筛]

    4176: Lucas的数论 题意:求\(\sum_{i=1}^n \sum_{j=1}^n \sigma_0(ij)\) \(n \le 10^9\) 代入\(\sigma_0(nm)=\sum_{ ...

  4. bzoj 4176: Lucas的数论 -- 杜教筛,莫比乌斯反演

    4176: Lucas的数论 Time Limit: 30 Sec  Memory Limit: 256 MB Description 去年的Lucas非常喜欢数论题,但是一年以后的Lucas却不那么 ...

  5. 【刷题】BZOJ 4176 Lucas的数论

    Description 去年的Lucas非常喜欢数论题,但是一年以后的Lucas却不那么喜欢了. 在整理以前的试题时,发现了这样一道题目"求Sigma(f(i)),其中1<=i< ...

  6. [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∑N​j=1∑N​d(ij) ...

  7. BZOJ 4176 Lucas的数论 莫比乌斯反演+杜教筛

    题意概述:求,n<=10^9,其中d(n)表示n的约数个数. 分析: 首先想要快速计算上面的柿子就要先把d(ij)表示出来,有个神奇的结论: 证明:当且仅当a,b没有相同的质因数的时候我们统计其 ...

  8. bzoj 4176: Lucas的数论【莫比乌斯反演+杜教筛】

    首先由这样一个结论: \[ d(ij)=\sum_{p|i}\sum_{q|j}[gcd(p,q)==1] \] 然后推反演公式: \[ \sum_{i=1}^{n}\sum_{j=1}^{n}\su ...

  9. Lucas的数论题解

    Lucas的数论 reference 题目在这里> < Pre 数论分块 默认向下取整时. 形如\(\sum\limits_{i=1}^n f\left( \frac{n}{i}\righ ...

随机推荐

  1. C语言博客作业—指针

    一.PTA实验作业 题目1: 求出数组中最大数和次最大数 1. 本题PTA提交列表 2. 设计思路 定义max表示范围数组中的最大数(初值设为a[0]),z表示找到的元素在数组中的位置: 定义指针*b ...

  2. 每日冲刺报告——Day5(Java-Team)

    第五天报告(11.6  周一) 团队:Java-Team 成员: 章辉宇(284) 吴政楠(286) 陈阳(PM:288) 韩华颂(142) 胡志权(143) github地址:https://git ...

  3. django restful 1-在线Python编辑器

    客户端(浏览器)----> 前端页面-----> 后端处理数据,并把数据以 json 形式发送到前端 online_app.py from django.conf import setti ...

  4. memmove 和 memcpy的区别以及处理内存重叠问题

    区别: memcpy和memmove()都是C语言中的库函数,在头文件string.h中,作用是拷贝一定长度的内存的内容,原型分别如下: void *memcpy(void *dst, const v ...

  5. 【learning】多项式相关(求逆、开根、除法、取模)

    (首先要%miskcoo,这位dalao写的博客(这里)实在是太强啦qwq大部分多项式相关的知识都是从这位dalao博客里面学的,下面这篇东西是自己对其博客学习后的一些总结和想法,大部分是按照其博客里 ...

  6. thinkphp中定义自己的函数

    可以在前台和后台的公共文件夹中common.php中定义自己的函数,这样就可以在控制器中调用,而不需要调用对象了 /** * @name addvtorandp * @author 黄峰1664253 ...

  7. 使用cxf创建webservice 出现timeOut的问题,设置spring超时时间

    <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.sp ...

  8. C++中友元

    一.友元分为两种 1.友元函数 2.友元类 二.解析比较好的博客:http://www.cnblogs.com/BeyondAnyTime/archive/2012/06/04/2535305.htm ...

  9. linux下查看mysql日志文件的方法

    查看mysql日志方法: mysql默认不允许我们查看日志.需要更改一些设置 1 vi 更改配置文件 允许用户查看日志文件 sudo vi /etc/mysql/mysql.conf.d/mysqld ...

  10. 记录下项目中常用到的JavaScript/JQuery代码一(大量实例)

    一直没有系统学习Javascript和Jquery,每次都是用到的时候去搜索引擎查,感觉效率挺低的.这边把我项目中用的的记录下,想到哪写哪,有时间再仔细整理. 当然,由于我主要是写后端java开发,而 ...