[HDU 5608]Function(莫比乌斯反演 + 杜教筛)
题目描述
有N2−3N+2=∑d∣Nf(d)N^2-3N+2=\sum_{d|N} f(d)N2−3N+2=∑d∣Nf(d)
求∑i=1Nf(i)\sum_{i=1}^{N} f(i)∑i=1Nf(i) mod 109+7~mod~10^9+7 mod 109+7
1<=T<=5001<=N<=1091<=T<=500\\1<=N<=10^91<=T<=5001<=N<=109
只有最多555组数据N>106N>10^6N>106
题目分析
f(n)=n2−3n+2−∑d∣n,d<nf(d)∴S(n)=∑i=1n(i2−3i+2−∑d∣i,d<if(d)) =∑i=1ni2−3∑i=1ni+2n−∑k=2n∑d=1⌊nk⌋f(d) =∑i=1ni2−3∑i=1ni+2n−∑k=2nS(⌊nk⌋) =n(n+1)(n−4)3+2n−∑k=2nS(⌊nk⌋)
f(n)=n^2-3n+2-\sum_{d|n,d<n}f(d)\\
\therefore S(n)=\sum_{i=1}^n(i^2-3i+2-\sum_{d|i,d<i}f(d))\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ =\sum_{i=1}^ni^2-3\sum_{i=1}^ni+2n-\sum_{k=2}^n\sum_{d=1}^{\lfloor\frac nk\rfloor}f(d)\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ =\sum_{i=1}^ni^2-3\sum_{i=1}^ni+2n-\sum_{k=2}^nS({\lfloor\frac nk\rfloor})\\
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ =\frac {n(n+1)(n-4)}3+2n-\sum_{k=2}^nS({\lfloor\frac nk\rfloor})
f(n)=n2−3n+2−d∣n,d<n∑f(d)∴S(n)=i=1∑n(i2−3i+2−d∣i,d<i∑f(d)) =i=1∑ni2−3i=1∑ni+2n−k=2∑nd=1∑⌊kn⌋f(d) =i=1∑ni2−3i=1∑ni+2n−k=2∑nS(⌊kn⌋) =3n(n+1)(n−4)+2n−k=2∑nS(⌊kn⌋)
如此一来就可以杜教筛了,然而仅仅这样还是会T,于是我们在想一想如何筛出前面一部分的fff值
令g(n)=n2−3n+2g(n)=n^2-3n+2g(n)=n2−3n+2,根据莫比乌斯反演
∴f(n)=∑d∣nμ(⌊nd⌋)g(d)
\therefore f(n)=\sum_{d|n}\mu(\lfloor\frac nd\rfloor)g(d)
∴f(n)=d∣n∑μ(⌊dn⌋)g(d)
于是用Θ(106ln(106))\Theta (10^6ln(10^6))Θ(106ln(106))筛出前10610^6106项就行了
总时间复杂度Θ(106ln(106)+T+5n23)\Theta(10^6ln(10^6)+T+5n^{\frac 23})Θ(106ln(106)+T+5n32)
AC code:
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <map>
using namespace std;
const int MAXN = 1000001;
const int mod = 1e9+7;
const int inv3 = 333333336;
inline int g(int n)
{
return (1ll * n * n % mod - 3ll * n % mod + 2) % mod;
}
int Prime[MAXN], Cnt, mu[MAXN], f[MAXN];
bool IsnotPrime[MAXN];
void init()
{
mu[1] = 1;
for(int i = 2; i < MAXN; ++i)
{
if(!IsnotPrime[i]) Prime[++Cnt] = i, mu[i] = -1;
for(int j = 1; j <= Cnt && i * Prime[j] < MAXN; ++j)
{
IsnotPrime[i * Prime[j]] = 1;
if(i % Prime[j] == 0)
{
mu[i * Prime[j]] = 0;
break;
}
mu[i * Prime[j]] = -mu[i];
}
}
for(int i = 1; i < MAXN; ++i)
for(int j = i; j < MAXN; j+=i)
f[j] = (f[j] + 1ll * mu[j/i] * g(i) % mod) % mod;
for(int i = 1; i < MAXN; ++i) f[i] = (f[i-1] + f[i]) % mod;
}
map<int,int>F;
inline int solve(int n)
{
if(n < MAXN) return f[n];
if(F.count(n)) return F[n];
int ret = (1ll * n * (n+1) % mod * (n-4) % mod * inv3 % mod + 2ll*n%mod) % mod;
for(int i = 2, j; i <= n; i=j+1)
{
j = n/(n/i);
ret = (ret - 1ll * (j-i+1) * solve(n/i) % mod) % mod;
}
return F[n]=ret;
}
int main()
{
init();
int T, n;
scanf("%d", &T);
while(T--)
{
scanf("%d", &n);
printf("%d\n", (solve(n)+mod)%mod);
}
}
[HDU 5608]Function(莫比乌斯反演 + 杜教筛)的更多相关文章
- [复习]莫比乌斯反演,杜教筛,min_25筛
[复习]莫比乌斯反演,杜教筛,min_25筛 莫比乌斯反演 做题的时候的常用形式: \[\begin{aligned}g(n)&=\sum_{n|d}f(d)\\f(n)&=\sum_ ...
- 【bzoj3930】[CQOI2015]选数 莫比乌斯反演+杜教筛
题目描述 我们知道,从区间[L,H](L和H为整数)中选取N个整数,总共有(H-L+1)^N种方案.小z很好奇这样选出的数的最大公约数的规律,他决定对每种方案选出的N个整数都求一次最大公约数,以便进一 ...
- [BZOJ 3930] [CQOI 2015]选数(莫比乌斯反演+杜教筛)
[BZOJ 3930] [CQOI 2015]选数(莫比乌斯反演+杜教筛) 题面 我们知道,从区间\([L,R]\)(L和R为整数)中选取N个整数,总共有\((R-L+1)^N\)种方案.求最大公约数 ...
- HDU 5608 function(莫比乌斯反演 + 杜教筛)题解
题意: 已知\(N^2-3N+2=\sum_{d|N}f(d)\),求\(\sum_{i=1}^nf(i) \mod 1e9+7\),\(n\leq1e9\) 思路: 杜教筛基础题? 很显然这里已经设 ...
- 【CCPC-Wannafly Winter Camp Day3 (Div1) F】小清新数论(莫比乌斯反演+杜教筛)
点此看题面 大致题意: 让你求出\(\sum_{i=1}^n\sum_{j=1}^n\mu(gcd(i,j))\). 莫比乌斯反演 这种题目,一看就是莫比乌斯反演啊!(连莫比乌斯函数都有) 关于莫比乌 ...
- 51nod 1237 最大公约数之和 V3【欧拉函数||莫比乌斯反演+杜教筛】
用mu写lcm那道卡常卡成狗(然而最后也没卡过去,于是写一下gcd冷静一下 首先推一下式子 \[ \sum_{i=1}^{n}\sum_{j=1}^{n}gcd(i,j) \] \[ \sum_{i= ...
- BSOJ5467 [CSPX2017#3]整数 莫比乌斯反演+杜教筛
题意简述 给你两个整数\(n\),\(k\),让你求出这个式子 \[ \sum_{a_1=1}^n \sum_{a_2=a_1}^n \sum_{a_3=a_2}^n \cdots \sum_{a_k ...
- 洛谷P3768 简单的数学题 莫比乌斯反演+杜教筛
题意简述 求出这个式子 \[ \sum_{i=1}^n\sum_{j=1}^n ij(i,j) \bmod p \] 做法 先用莫比乌斯反演拆一下式子 \[ \begin{split} \sum_{i ...
- 牛客练习赛84F-牛客推荐系统开发之下班【莫比乌斯反演,杜教筛】
正题 题目链接:https://ac.nowcoder.com/acm/contest/11174/F 题目大意 给出\(n,k\)求 \[\sum_{i_1=1}^n\sum_{i_2=1}^n.. ...
随机推荐
- Pytorch Tensor 常用操作
https://pytorch.org/docs/stable/tensors.html dtype: tessor的数据类型,总共有8种数据类型,其中默认的类型是torch.FloatTensor, ...
- [SQL] - Attempted to read or write protected memory. This is often an indication that other memory is corrupt. 问题之解决
场景: 使用 Oracle.DataAccess.dll 访问数据库时,OracleDataAdapter 执行失败. 异常: System.AccessViolationException was ...
- java war包 远程debug出现的问题解决,学会查看日志
开启远程debug之后,8005 关闭tomcat 又启动不了了.. netstat -lnp 未发现8005接口 eclipse 内远程链接到服务器,debug 下发现服务器线程启动也存在问题.很多 ...
- Git--远程仓库版本回退方法
Git--远程仓库版本回退方法 1 简介 最近在使用git时遇到了远程分支需要版本回滚的情况,于是做了一下研究,写下这篇博客. 2 问题 如果提交了一个错误的版本,怎么回退版本? 如果提交了一个错误的 ...
- 玫瑰花小制作分享-JavaScript(七夕专属浪漫)
分享一个玫瑰花的制作小方法,用小小的代码给自己的她送上一个不一样的玫瑰花. 玫瑰花代码由JavaScript实现,JavaScript 作为一种脚本语言, 被发明用于在 HTML 网页上使用,可以给H ...
- OpenCV学习笔记5
OpenCV学习笔记5 图像变换 傅里叶变换 这里可以先学习一下卷积分,了解清除卷积的过程和实际意义,在看这一章节的内容. 原理: 傅里叶变换经常被用来分析不同滤波器的频率特性.我们可以使用 2D 离 ...
- sidecar-inject代码分析
Istio通过对serviceMesh中的每个pod注入sidecar,来实现无侵入式的服务治理能力.其中,sidecar的注入是其能力实现的重要一环(本文主要介绍在kubernetes集群中的注入方 ...
- redis哈希表数据类型键的查询和删除命令
一.查询 命令名称:hget 语法:hget key field 功能:返回哈希表key中给定域field的值 返回值: 给定域的值. 当给定域不存在或是给定key不存在时,返回nil 命令名称:hg ...
- Powershell学习笔记:(二)、基础知识
从Window7以后,WIndows系统都自带了Windows PowerShell. 自带版本如下 WIndow7 2.0 WIndow8 3.0 Window8.1 4.0 Win ...
- VS2015功能介绍
1.New Web Site新网站 Recent 系统文件夹,里面存放最近使用的文档的快捷方式,以便再次访问(可删除) Installed 安装 Templates 样板,模板 Online 联网 . ...