Description

去年的Lucas非常喜欢数论题,但是一年以后的Lucas却不那么喜欢了。

在整理以前的试题时,发现了这样一道题目“求Sigma(f(i)),其中1<=i<=N”,其中 表示i的约数个数。他现在长大了,题目也变难了。

求如下表达式的值:

一行一个整数ans,表示答案模1000000007的值。

Sample Input

2

Sample Output

8

HINT

对于100%的数据n <= 10^9。

题解:

  解锁新技能:杜教筛。

  再复习一下:

  若$F(n)=\sum_{i=1}^{n}f(i),g(i)=\sum_{j|i}f(i),G(n)=\sum_{i=1}^{n}g(i)$,

  则有:$G(n)=\sum_{i=1}^{n}F(\lfloor\frac{n}{i}\rfloor)$。

  即:$F(n)=G(n)-\sum_{i=2}^{n}F(\lfloor\frac{n}{i}\rfloor)$

  然后就可以上杜教筛了。

  话归正题:
  对于本题,其实和bzoj3994式子一样……

$\sum_{i=1}^{n}\sum_{j=1}^{n}d(ij)$

$=\sum_{i=1}^{n}\sum_{j=1}^{n}\sum_{p=1}^{n^{2}}[p|ij]$

$=\sum_{i=1}^{n}\sum_{j=1}^{n}\sum_{p=1}^{n^{2}}[\frac{p}{(p,i)}|j]$

$=\sum_{t=1}^{n}\sum_{i=1}^{\lfloor\frac{n}{t}\rfloor}\sum_{j=1}^{n}\sum_{p=1}^{\lfloor\frac{n^{2}}{t}\rfloor}[p|j]*[(i,p)==1]$

$=\sum_{t=1}^{n}\sum_{i=1}^{\lfloor\frac{n}{t}\rfloor}\sum_{p=1}^{\lfloor\frac{n^{2}}{t}\rfloor}\sum_{d|(i,p)}\mu(d)\lfloor \frac{n}{p} \rfloor$

$=\sum_{d=1}^{n}\mu(d)\sum_{t=1}^{\lfloor\frac{n}{d}\rfloor}\sum_{i=1}^{\lfloor\frac{n}{td}\rfloor}\sum_{p=1}^{\lfloor\frac{n^{2}}{td}\rfloor}\lfloor\frac{n}{pd}\rfloor$

$n>=pd,n^{2}>=tdn$

$\therefore Ans=\sum_{d=1}^{n}\mu(d)\sum_{t=1}^{\lfloor\frac{n}{d}\rfloor}\sum_{i=1}^{\lfloor\frac{n}{td}\rfloor}\sum_{p=1}^{\lfloor\frac{n}{td}\rfloor}\lfloor\frac{n}{pd}\rfloor$

$Ans=\sum_{d=1}^{n}\mu(d)\sum_{t=1}^{\lfloor\frac{n}{d}\rfloor}\lfloor\frac{n}{td}\rfloor\sum_{p=1}^{\lfloor\frac{n}{d}\rfloor}\lfloor\frac{n}{pd}\rfloor$

$设f(i)=\sum_{x=1}^{i}\lfloor\frac{i}{x} \rfloor$

$\therefore Ans=\sum_{d=1}^{n}\mu(d)f^2(\lfloor\frac{n}{d}\rfloor)$

  然后分块+杜教筛即可。

代码:

 #include<cstdio>
using namespace std;
typedef long long ll;
const ll N=(ll)3e6+;
const ll mod=1000000007ll;
short miu[N];
int prim[N/],num;
bool vis[N];
int sum[N];
inline void init(){
miu[]=sum[]=;
for(int i=;i<N;i++){
if(!vis[i]){
prim[++num]=i;
miu[i]=-;
}for(int j=;j<=num&&prim[j]*i<N;j++){
vis[i*prim[j]]=;
if(i%prim[j]==){
miu[i*prim[j]]=;
break;
}
else
miu[i*prim[j]]=-miu[i];
}
// printf("miu[%d]=%d\n",i,miu[i]);
}
for(int i=;i<N;i++)
sum[i]=sum[i-]+miu[i];
}
struct edges{
ll v;int w;edges *last;
}edge[N/],*head[];int cnt;
const int limit=;
inline void push(int u,ll v,int w){
edge[++cnt]=(edges){v,w,head[u]};head[u]=edge+cnt;
}
inline ll Get_sum(ll x){
if(x<N) return sum[x];
int t=x%limit;
for(edges *i=head[t];i;i=i->last)
if(i->v==x) return i->w;
ll ans=;
for(ll i=,pos;i<=x;i=pos+){
pos=x/i;
pos=x/pos;
ans-=(pos-i+)*Get_sum(x/pos);
}
push(t,x,ans);
return ans;
}
inline ll Get_F(ll x){
ll ans=;
for(ll i=,pos;i<=x;i=pos+){
pos=x/i;
pos=x/pos;
ll t=x/i;
ans+=t*(pos-i+);
ans%=mod;
}return ans;
}
inline ll solve(ll x){
ll ans=;
for(ll i=,pos;i<=x;i=pos+){
pos=x/i;
pos=x/pos;
ll t=Get_F(x/i);
ans+=(Get_sum(pos)-Get_sum(i-))%mod*t%mod*t%mod;
ans%=mod;
}
return (ans%mod+mod)%mod;
}
int main(){
init();
ll a;
scanf("%lld",&a);
printf("%lld\n",solve(a));
}

【bzoj 4176】 Lucas的数论 莫比乌斯反演(杜教筛)的更多相关文章

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  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. BZOJ4176 Lucas的数论 【莫比乌斯反演 + 杜教筛】

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

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

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

随机推荐

  1. JAVA全套学习视频

    链接: https://pan.baidu.com/s/1miE7kvQ 密码: jj8x

  2. generate parentheses(生成括号)

    Given n pairs of parentheses, write a function to generate all combinations of well-formed parenthes ...

  3. JAVA程序员面试宝典

    程序员面试之葵花宝典 面向对象的特征有哪些方面    1. 抽象:抽象就是忽略一个主题中与当前目标2. 无关的那些方面,3. 以便更充分地注意与当前目标4. 有关的方面.抽象并不5. 打算了解全部问题 ...

  4. 老马Repository模式原文

    A system with a complex domain model often benefits from a layer, such as the one provided by Data M ...

  5. Netty入门

    一.NIO Netty框架底层是对NIO的高度封装,所以想要更好的学习Netty之前,应先了解下什么是NIO - NIO是non-blocking的简称,在jdk1.4 里提供的新api,他的他的特性 ...

  6. 【转】学习FFmpeg API – 解码视频

    ffmpeg是编解码的利器,用了很久,以前看过dranger 的教程,非常精彩,受益颇多,是学习ffmpeg api很好的材料.可惜的是其针对的ffmpeg版本已经比较老了,而ffmpeg的更新又很快 ...

  7. 人手一份核武器 - Hacking Team 泄露(开源)资料导览手册

    https://zhuanlan.zhihu.com/p/20102713 author:蒸米 0x00 序 事先声明本人并不是全栈安全工程师,仅仅是移动安全小菜一枚,所以对泄漏资料的分析难免会有疏忽 ...

  8. SAE提供服务分析

    这个分析列表主要关注两个问题,服务能做什么,移植实现难度. AppConfig: 这个东西主要面向SAE本身的一些配置选项,移植时放弃这个东西,所以就不谈难度了Counter :这个东西提供某个操作的 ...

  9. pc端页面打包成安卓apk

    一.phoneGap PhoneGap是一个采用HTML,CSS和JavaScript的技术,创建移动跨平台移动应用程序的快速开发平台.它使开发者能够在网页中调用IOS,Android,Palm,Sy ...

  10. 【Java入门提高篇】Day16 Java异常处理(上)

    当当当当当当,各位看官,好久不见,甚是想念. 今天我们来聊聊Java里的一个小妖精,那就是异常. 什么是异常?什么是异常处理? 异常嘛,顾名思义就是不正常,(逃),是Java程序运行时,发生的预料之外 ...