题意概述:求,n<=10^9,其中d(n)表示n的约数个数。

分析:

  首先想要快速计算上面的柿子就要先把d(ij)表示出来,有个神奇的结论:

  

  证明:当且仅当a,b没有相同的质因数的时候我们统计其贡献,可以发现所有被统计的(a,b)乘积的质因数分解形式正好和i,j的所有因数的质因数分解形式一一对应,不重不漏(对于b中质因数指数不为0对应的就是i中指数+b中指数的情况,对于b中质因数指数为0的情况对应i中指数的情况)。

  然后就有如下的推导:

  

  对于这个式子,整个数字分段来算,n/d一共sqrt(n)种取值,用杜教筛求μ的前缀和,后面那部分每次可以用sqrt(n/d)的复杂度计算出来,整个时间复杂度大约是O(n^(3/4))。(实在是太玄学了这个时间复杂度我不是很会算ORZ)

  至于杜教筛......这里我就不讲了吧,看dalao链接!:http://jiruyi910387714.is-programmer.com/posts/195270.html

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<cmath>
#include<queue>
#include<set>
#include<map>
#include<vector>
#include<cctype>
using namespace std;
const int mo=;
const int maxn=; int N,pri[maxn],mu[maxn],tot;
bool ntp[maxn];
struct Hash{
static const int sz=;
static const int maxn=;
int first[sz],np,next[maxn],id[maxn],val[maxn];
Hash(){
np=;
memset(first,,sizeof(first));
}
void ins(int pos,int v){
int i=pos%sz;
next[++np]=first[i],first[i]=np;
id[np]=pos,val[np]=v;
}
int query(int pos){
int i=pos%sz;
for(int p=first[i];p;p=next[p])
if(id[p]==pos) return val[p];
return -;
}
}hash; void get_mu()
{
ntp[]=ntp[]=,mu[]=;
for(int i=;i<=;i++){
if(!ntp[i]) pri[++tot]=i,mu[i]=-;
for(int j=;j<=tot&&1ll*pri[j]*i<=;j++){
ntp[i*pri[j]]=;
if(i%pri[j]==){ mu[pri[j]*i]=; break; }
mu[pri[j]*i]=-mu[i];
}
}
}
int F(int n){
int re=;
for(int i=,last;i<=n;i=last+)
last=n/(n/i),re=(re+1ll*(last-i+)*(n/i)%mo)%mo;
return re;
}
int S(int n){
int re=hash.query(n);
if(re!=-) return re;
re=;
for(int i=,last;i<=n;i=last+){
last=n/(n/i);
re=(re-1ll*(last-i+)*S(n/i)%mo+mo)%mo;
}
hash.ins(n,re);
return re;
}
int solve(int n)
{
int re=,f;
for(int i=,last;i<=n;i=last+){
last=n/(n/i),f=F(n/i);
re=(re+1ll*f*f%mo*(S(last)-S(i-)+mo)%mo)%mo;
}
return re;
}
int main()
{
get_mu();
int sum=;
for(int i=;i<=;i++)
hash.ins(i,sum=(sum+mu[i]+mo)%mo);
scanf("%d",&N);
printf("%d\n",solve(N));
return ;
}

BZOJ 4176 Lucas的数论 莫比乌斯反演+杜教筛的更多相关文章

  1. 【bzoj4176】Lucas的数论 莫比乌斯反演+杜教筛

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

  2. BZOJ4652 [Noi2016]循环之美 【数论 + 莫比乌斯反演 + 杜教筛】

    题目链接 BZOJ 题解 orz 此题太优美了 我们令\(\frac{x}{y}\)为最简分数,则\(x \perp y\)即,\(gcd(x,y) = 1\) 先不管\(k\)进制,我们知道\(10 ...

  3. BZOJ 3930: [CQOI2015]选数 莫比乌斯反演 + 杜教筛

    求 $\sum_{i=L}^{R}\sum_{i'=L}^{R}....[gcd_{i=1}^{n}(i)==k]$   $\Rightarrow \sum_{i=\frac{L}{k}}^{\fra ...

  4. [BZOJ 3930] [CQOI 2015]选数(莫比乌斯反演+杜教筛)

    [BZOJ 3930] [CQOI 2015]选数(莫比乌斯反演+杜教筛) 题面 我们知道,从区间\([L,R]\)(L和R为整数)中选取N个整数,总共有\((R-L+1)^N\)种方案.求最大公约数 ...

  5. [复习]莫比乌斯反演,杜教筛,min_25筛

    [复习]莫比乌斯反演,杜教筛,min_25筛 莫比乌斯反演 做题的时候的常用形式: \[\begin{aligned}g(n)&=\sum_{n|d}f(d)\\f(n)&=\sum_ ...

  6. 【bzoj3930】[CQOI2015]选数 莫比乌斯反演+杜教筛

    题目描述 我们知道,从区间[L,H](L和H为整数)中选取N个整数,总共有(H-L+1)^N种方案.小z很好奇这样选出的数的最大公约数的规律,他决定对每种方案选出的N个整数都求一次最大公约数,以便进一 ...

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

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

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

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

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

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

随机推荐

  1. 用IntelliJ IDEA 配置Maven并部署Maven工程到Tomcat(Windows中)

    近几天做一个新项目才接触Intellij IDEA 1.在官网下载了maven 解压并新建一个本地仓库文件夹 2.配置本地仓库路径 3.配置maven环境变量 4.在IntelliJ IDEA中配置m ...

  2. 【2013 ICPC亚洲区域赛成都站 F】Fibonacci Tree(最小生成树+思维)

    Problem Description Coach Pang is interested in Fibonacci numbers while Uncle Yang wants him to do s ...

  3. java servlet数据库查询并将数据显示到jsp页面

    需要的jar包:mysql-connector-java.jar build path只是个jar包的引用,部署的时候想不丢包最好还是手动拷贝到对应项目的lib文件下. 在try{}中定义的变量为局部 ...

  4. .Net core 使用Swagger

    接触到项目的时候,用了很久的Swagger,发现Swagger真的非常好用,不但方便了调试Web Api,还生成了Api 文档,真是非常的好用啊. 然后我想搞懂到底如何使用Swagger,所以自己建了 ...

  5. Python Homework 001

    1 #!/usr/bin/env python 2 #-*- coding:utf-8 -*- 3 4 import getpass 5 name = "xilong" 6 pas ...

  6. Java分布式锁之数据库方式实现

    之前的文章<Java分布式锁实现>中列举了分布式锁的3种实现方式,分别是基于数据库实现,基于缓存实现和基于zookeeper实现.三种实现方式各有可取之处,本篇文章就详细讲解一下Java分 ...

  7. Echarts+百度地图

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  8. mybatis调用存过程返回结果集和out参数值

    Mapper文件: 1.配置一个参数映射集,采用hashMap对象 2.使用call调用存储过,其中in out等标识的参数需要有详细的描述,例如:mode,JavaType,jdbcType等 &l ...

  9. 【 es搜索】

    地图搜索实现: ①参数: 左下角经纬度和右上角经纬度 图层数(zoom) 关键字等各种数据库中的字段 排序方式 具体的坐标点+距离 ②实现 a.用es作为关系库,首先先mapping所有的字段,然后用 ...

  10. django使用pycharm为项目选择虚拟环境-3.1

    使用pycharm打开项目 选择右上角的 file - settings - project - project interpreter 选择左上的设置符号,选择 Add 选择红框部分,然后选择之前创 ...