[51Nod 1237] 最大公约数之和 (杜教筛+莫比乌斯反演)
题目描述
求∑i=1n∑j=1n(i,j) mod (1e9+7)n<=1010\sum_{i=1}^n\sum_{j=1}^n(i,j)~mod~(1e9+7)\\n<=10^{10}i=1∑nj=1∑n(i,j) mod (1e9+7)n<=1010
题目分析
乍一看十分像裸莫比乌斯反演,然而nnn的范围让人望而却步
于是先变化一下式子
Ans=∑i=1n∑j=1n(i,j)Ans=\sum_{i=1}^n\sum_{j=1}^n(i,j)Ans=i=1∑nj=1∑n(i,j)
枚举T=(i,j)T=(i,j)T=(i,j)
=∑T=1n∑i=1⌊nT⌋∑j=1⌊nT⌋[(i,j)==1]=∑T=1n∑i=1⌊nT⌋∑j=1⌊nT⌋∑d∣i,d∣jμ(d)=∑T=1nT∑d=1⌊nT⌋μ(d)⌊nTd⌋2=\sum_{T=1}^n\sum_{i=1}^{\lfloor\frac nT\rfloor}\sum_{j=1}^{\lfloor\frac nT\rfloor}[(i,j)==1]\\=\sum_{T=1}^n\sum_{i=1}^{\lfloor\frac nT\rfloor}\sum_{j=1}^{\lfloor\frac nT\rfloor}\sum_{d|i,d|j}\mu(d)\\=\sum_{T=1}^nT\sum_{d=1}^{\lfloor\frac nT\rfloor}\mu(d){\lfloor\frac n{Td}\rfloor}^2=T=1∑ni=1∑⌊Tn⌋j=1∑⌊Tn⌋[(i,j)==1]=T=1∑ni=1∑⌊Tn⌋j=1∑⌊Tn⌋d∣i,d∣j∑μ(d)=T=1∑nTd=1∑⌊Tn⌋μ(d)⌊Tdn⌋2
令k=Td
=∑k=1n⌊nk⌋2φ(k)=\sum_{k=1}^n{\lfloor\frac n{k}\rfloor}^2\varphi(k)=k=1∑n⌊kn⌋2φ(k)
则此时可以整除分块优化,每次算出⌊nk⌋{\lfloor\frac n{k}\rfloor}⌊kn⌋相等的上下界i,ji,ji,j后用莫比乌斯反演计算(Sφ(j)−Sφ(i−1))(S\varphi(j)-S\varphi(i-1))(Sφ(j)−Sφ(i−1))
由于计算φ\varphiφ的前缀和时记忆化处理过,所以在杜教筛外面再套了一个整除分块优化不会影响时间复杂度,复杂度仍是Θ(n23)\Theta(n^{\frac23})Θ(n32)
AC Code
#include <cstdio>
#include <map>
#include <cstring>
#include <algorithm>
using namespace std;
typedef long long LL;
const int mod = 1e9+7;
const int MAXN = 5e6+1;
const int inv2 = 500000004;
map<LL, LL> S; LL s[MAXN];
int Prime[MAXN], Cnt, phi[MAXN];
bool IsnotPrime[MAXN];
void init()
{
phi[1] = 1;
for(int i = 2; i < MAXN; ++i)
{
if(!IsnotPrime[i]) Prime[++Cnt] = i, phi[i] = i-1;
for(int j = 1; j <= Cnt && i * Prime[j] < MAXN; ++j)
{
IsnotPrime[i * Prime[j]] = 1;
if(i % Prime[j] == 0)
{
phi[i * Prime[j]] = phi[i] * Prime[j];
break;
}
phi[i * Prime[j]] = phi[i] * phi[Prime[j]];
}
}
for(int i = 1; i < MAXN; ++i) s[i] = (s[i-1] + phi[i]) % mod;
}
inline LL sum(LL n)
{
if(n < MAXN) return s[n];
if(S.count(n)) return S[n];
LL ret = (n%mod) * ((n+1)%mod) % mod * inv2 % mod;
for(LL i = 2, j; i <= n; i=j+1)
{
j = n/(n/i);
ret = (ret - sum(n/i) * ((j-i+1)%mod) % mod) % mod;
}
return S[n] = ret;
}
inline LL solve(LL n)
{
LL ret = 0;
for(LL i = 1, j; i <= n; i=j+1)
{
j = n/(n/i);
ret = (ret + ((n/i)%mod) * ((n/i)%mod) % mod * ((sum(j)-sum(i-1))%mod) % mod) % mod;
}
return ret;
}
int main ()
{
init(); LL n;
scanf("%lld", &n);
printf("%lld\n", (solve(n)+mod)%mod);
}
[51Nod 1237] 最大公约数之和 (杜教筛+莫比乌斯反演)的更多相关文章
- BZOJ_4176_Lucas的数论_杜教筛+莫比乌斯反演
BZOJ_4176_Lucas的数论_杜教筛+莫比乌斯反演 Description 去年的Lucas非常喜欢数论题,但是一年以后的Lucas却不那么喜欢了. 在整理以前的试题时,发现了这样一道题目“求 ...
- 【XSY2731】Div 数论 杜教筛 莫比乌斯反演
题目大意 定义复数\(a+bi\)为整数\(k\)的约数,当且仅当\(a\)和\(b\)为整数且存在整数\(c\)和\(d\)满足\((a+bi)(c+di)=k\). 定义复数\(a+bi\)的实部 ...
- [CQOI2015][bzoj3930] 选数 [杜教筛+莫比乌斯反演]
题面: 传送门 思路: 首先我们把区间缩小到$\left[\lfloor\frac{L-1}{K}\rfloor,\lfloor\frac{R}{K}\rfloor\right]$ 这道题的最特殊的点 ...
- [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) ...
- [51nod1220] 约数之和(杜教筛+莫比乌斯反演)
题面 传送门 题解 嗯--还是懒得写了--这里 //minamoto #include<bits/stdc++.h> #define R register #define IT map&l ...
- bzoj 4916: 神犇和蒟蒻 (杜教筛+莫比乌斯反演)
题目大意: 读入n. 第一行输出“1”(不带引号). 第二行输出$\sum_{i=1}^n i\phi(i)$. 题解: 所以说那个$\sum\mu$是在开玩笑么=.= 设$f(n)=n\phi(n) ...
- 51nod 1237 最大公约数之和 V3(杜教筛)
[题目链接] https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1237 [题目大意] 求[1,n][1,n]最大公约数之和 ...
- 51NOD 1237 最大公约数之和 V3 [杜教筛]
1237 最大公约数之和 V3 题意:求\(\sum_{i=1}^n\sum_{j=1}^n(i,j)\) 令\(A(n)=\sum_{i=1}^n(n,i) = \sum_{d\mid n}d \c ...
- 51Nod.1237.最大公约数之和 V3(莫比乌斯反演 杜教筛 欧拉函数)
题目链接 \(Description\) \(n\leq 10^{10}\),求 \[\sum_{i=1}^n\sum_{j=1}^ngcd(i,j)\ mod\ (1e9+7)\] \(Soluti ...
随机推荐
- 用pytorch1.0搭建简单的神经网络:进行多分类分析
用pytorch1.0搭建简单的神经网络:进行多分类分析 import torch import torch.nn.functional as F # 包含激励函数 import matplotlib ...
- [转帖]Nginx rewrite 规则 与 proxy_pass 实现
Nginx rewrite 规则 与 proxy_pass 实现 https://www.cnblogs.com/jicki/p/5546916.html Nginx rewrite 规则 与 pr ...
- [转帖]时序数据库技术体系 – InfluxDB TSM存储引擎之数据写入
时序数据库技术体系 – InfluxDB TSM存储引擎之数据写入 http://hbasefly.com/2018/03/27/timeseries-database-6/ 2018年3月27日 ...
- python openpyxl模块实现excel的读取,新表创建及原数据表追加新数据
当实际工作需要把excel表的数据读取出来,或者把一些统计数据写入excel表中时,一个设计丰富,文档便于寻找的模块就会显得特别的有吸引力,本文对openpyxl模块的一些常见用法做一些记录,方便工作 ...
- Python12之列表3(列表常用操作符,以及常用的内置函数)
一.比较操作符: list1 > list2 比较两个列表的大小,Python会直接从列表的第0个元素进行比较,若相等,则继续下一个比较 得到的结果是布尔值 二.逻辑操作 ...
- Acuntetix的安装与使用
1.下载软件压缩包文件,首先点击"Acunetix.Web.12.0.180911134.Retail.exe"安装最新版原程序 2.阅读并同意软件安装协议 3.设置登录信息,包括 ...
- 08 IO流(五)——文件字符流FileWriter/FileReader
对比文件字节流的优势 对于文本文件的数据传输,使用文件字符流,就不用考虑编码转码的问题. 对比文件字节流,在方法上的不同有哪些 文件字符流有append方法: Writer append(char c ...
- AtomicIntegerFieldUpdater和AtomicInteger
为什么有了AtomicInteger还需要AtomicIntegerFieldUpdater? 当需要进行原子限定的属性所属的类会被创建大量的实例对象, 如果用AtomicInteger, 每个实例里 ...
- Java8新特性 - 新时间和日期 API
本地时间和时间戳 主要方法: now:静态方法,根据当前时间创建对象 of:静态方法,根据指定日期/时间创建对象 plusDays,plusWeeks,plusMonths,plusYears:向当前 ...
- nginx buffer
1.错误日志:warn:an upstream response is buffered to a temporary file 解决办法:增加fastcgi_buffers 8 4K; fa ...