bzoj 4176 Lucas的数论
bzoj 4176 Lucas的数论
- 和约数个数和那题差不多.只不过那个题是多组询问,这题只询问一次,并且 \(n\) 开到了 \(10^9\).
\sum_{i=1}^N \sum_{j=1}^N f(ij)&=
\sum_{i=1}^N \sum_{j=1}^N \sum_{x|i} \sum_{y|j}[gcd(x,y)=1]\\&=
\sum_{i=1}^N \sum_{j=1}^N \sum_{x|i} \sum_{y|j} \sum_{d|gcd(x,y)}\mu(d)\\&=
\sum_{d=1}^N \mu(d)\sum_{x=1}^{\lfloor \frac N d \rfloor} \sum_{y=1}^{\lfloor \frac M d \rfloor}\lfloor \frac {N}{dx} \rfloor \lfloor \frac {N}{dy} \rfloor\\&=
\sum_{d=1}^N \mu(d)\cdot \sum_{x=1}^{\lfloor \frac N d \rfloor}\lfloor \frac {N}{dx} \rfloor\cdot \sum_{y=1}^{\lfloor \frac N d \rfloor}\lfloor \frac {N}{dy} \rfloor.
\end{align*}
\]
- 记 \(f'(n)=\sum_{i=1}^n \lfloor \frac n i \rfloor\).
- 则答案为
\]
- \(N\) 是 \(10^9\) 级别,所以用杜教筛求 \(\mu\) 的前缀和.然后套两个整除分块,外层算答案,里层算 \(f'\) 即可.
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
inline int read()
{
int out=0,fh=1;
char jp=getchar();
while ((jp>'9'||jp<'0')&&jp!='-')
jp=getchar();
if (jp=='-')
fh=-1,jp=getchar();
while (jp>='0'&&jp<='9')
out=out*10+jp-'0',jp=getchar();
return out*fh;
}
const int P=1e9+7;
const int inv2=(P+1)>>1;
inline int add(int a,int b)
{
return (a + b) % P;
}
inline int mul(int a,int b)
{
return 1LL * a * b % P;
}
inline int sub(int a,int b)
{
return add(a,P-b);
}
const int MAXN=3e6+10;
int n,ans=0;
int f[MAXN],prime[MAXN],cnt=0,mu[MAXN],ism[MAXN],summu[MAXN];
int calc_F(int i)
{
int res = 0;
for(int l=1,r; l<=i; l=r+1)
{
r = i/(i/l);
res = add(res,mul(r-l+1,(i/l)));
}
return res;
}
void init(int N)
{
ism[1] = 1;
mu[1] = 1;
for(int i=2; i<=N; ++i)
{
if(!ism[i])
{
prime[++cnt] = i;
mu[i] = -1;
}
for(int j=1; j<=cnt; ++j)
{
ll num = i * prime[j];
if(num > N)
break;
ism[num] = 1;
if(i % prime[j] == 0)
break;
else
mu[num] = -mu[i];
}
}
for(int i=1; i<=N; ++i)
summu[i] = add(summu[i-1],P+mu[i]);
}
int AP(int x)
{
return mul(mul(x,x+1),inv2);
}
map<int,int> mp;
const int sqN=31200;
int calc(int x)
{
if(x<=sqN)
return summu[x];
if(mp.find(x)!=mp.end())
return mp[x];
int res=1;
for(int l=2,r;l<=x;l=r+1)
{
r=x/(x/l);
int tmp=mul(r-l+1,calc(x/l));
res=add(res,P-tmp);
}
return mp[x]=res;
}
void solve()
{
init(sqN);
for(int l=1,r;l<=n;l=r+1)
{
r=n/(n/l);
int tmp=add(calc(r),P-calc(l-1));
tmp=mul(tmp,mul(calc_F(n/l),calc_F(n/l)));
ans=add(tmp,ans);
}
cout<<ans<<endl;
}
int main()
{
freopen("math.in","r",stdin);
freopen("math.out","w",stdout);
n=read();
solve();
return 0;
}
bzoj 4176 Lucas的数论的更多相关文章
- 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的数论
题链: http://www.lydsy.com/JudgeOnline/problem.php?id=4176 题解: 莫比乌斯反演,杜教筛 首先有这么一个结论: 令d(n)表示n的约数的个数(就是 ...
- 【刷题】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 ...
随机推荐
- zoj3822
这题说得是给了一个n*m的棋盘,每天在这个棋盘中放置一个棋子,不能放在之前已经摆放过得地方,求最后使得每行每列都有至少一个棋子的期望天数是多少,这样我们考虑怎么放,放哪里,显然数据大而且不知道状态怎么 ...
- 忘记oracle的sys用户密码怎么修改以及Oracle 11g 默认用户名和密码
欢迎和大家交流技术相关问题: 邮箱: jiangxinnju@163.com 博客园地址: http://www.cnblogs.com/jiangxinnju GitHub地址: https://g ...
- mfc制作ActiveX
转:https://blog.csdn.net/hkcsdn/article/details/52908748 前言 ActiveX是Microsoft对于一系列策略性面向对象程序技术和工 ...
- git如何自动打补丁
答:git am --reject jello.patch (如果打补丁失败,会自动生成rej文件)
- 记录web api的request以及response(即写log)
https://www.cnblogs.com/felixnet/p/5689501.html https://blog.csdn.net/Vblegend_2013/article/details/ ...
- Codeforces Round #394 (Div. 2) E. Dasha and Puzzle(dfs)
http://codeforces.com/contest/761/problem/E 题意:给出一棵树,现在要把这棵树上的结点放置在笛卡尔坐标上,使得每一条边与x轴平行或者与y轴平行.输出可行解,即 ...
- Sublime Text 3 配置文件路径修改
Sublime Text 3安装完以后(安装过程不再演示),第一次打开会在C:\Users\admin\AppData\Roaming目录下创建一个Sublime Text 3目录用于存放Sublim ...
- iframe.contentWindow介绍
一.在使用iframe的页面,要操作这个iframe里面的DOM元素可以用: contentWindow.contentDocument(测试的时候chrome浏览器,要在服务器环境下) 1.先获取i ...
- git 沙河游戏节点图, 自由沙盒模拟git, 各类交互git命令
git学习练习总资源链接: https://try.github.io/ (练习已通,有document) 本沙盒游戏教学:https://learngitbranching.js.org/?demo ...
- java.lang.NoSuchMethodError: org.springframework.core.io.ResourceEditor
这种情况一般是jar包版本问题,pom导入的jar包存在一个2.5.6的,删掉即可.