●HDU 5608 function
题链:
http://acm.hdu.edu.cn/showproblem.php?pid=5608
题解:
莫比乌斯反演,杜教筛
已知$$N^2-3N+2=\sum_{d|N} f(d)$$
多次询问,给出n,求f的前缀和S(n)。
把f函数卷上$I(x)=1$
那么有:
$$\sum_{i=1}^{n}f*l(i)=\sum_{i=1}^{n}l(i)S(\lfloor \frac{n}{i} \rfloor)$$
所以:
$$S(n)=\sum_{i=1}^{n}f*l(i)-\sum_{i=2}^{n}S(\lfloor \frac{n}{i} \rfloor)$$
又因为
$$\begin{aligned}
\sum_{i=1}^{n}f*l(i)&=\sum_{i=1}^{n}\sum_{d|i}f(d)l(\frac{i}{d})\\
&=\sum_{i=1}^{n}\sum_{d|i}f(d)\\
&=\sum_{i=1}^{n}(i^2-3i+2)\\
&=\frac{n(n+1)(2n+1)}{6}-\frac{3n(1+n)}{2}+2n\\
\end{aligned}$$
所以
$$S(n)=\frac{n(n+1)(2n+1)}{6}-\frac{3n(1+n)}{2}+2n-\sum_{i=2}^{n}S(\lfloor \frac{n}{i} \rfloor)$$
到此,就可以直接用杜教筛求解了,不过有点慢。
我们可以先预处理出前$n^{\frac{2}{3}}$个的前缀和
令$F(N)=N^2-3N+2$,那么F就是f的约数和函数
(因为$F(N)=\sum_{d|N}f(d)$)
所以由莫比乌斯反演可知:
$$f(N)=\sum_{d|N}\mu(d)F(\frac{N}{d})$$
然后可以用$O(nlogn)$的复杂度先处理出一些前缀和,
然后再杜教筛即可。
代码:
#include<bits/stdc++.h>
#define DJM 1000000
using namespace std;
const int mod=1000000007;
struct Hash_Table{
#define Hmod 1425367
int org[DJM+50],val[DJM+50],nxt[DJM+50],head[Hmod],hnt;
Hash_Table(){hnt=1;}
void Push(int x,int v){
static int u; u=x%Hmod;
org[hnt]=x; val[hnt]=v; nxt[hnt]=head[u]; head[u]=hnt++;
}
int Find(int x){
static int u; u=x%Hmod;
for(int i=head[u];i;i=nxt[i])
if(org[i]==x) return val[i];
return -1;
}
}H;
int mu[DJM+50],F[DJM+50],f[DJM+50];
void Sieve(){
static bool np[DJM+50];
static int prime[DJM+50],pnt;
mu[1]=1;
for(int i=2;i<=DJM;i++){
F[i]=(1ll*i*i-3*i+2+mod)%mod;
if(!np[i]) prime[++pnt]=i,mu[i]=-1;
for(int j=1;j<=pnt&&i<=DJM/prime[j];j++){
np[i*prime[j]]=1;
if(i%prime[j]) mu[i*prime[j]]=-mu[i];
else break;
}
}
for(int d=1;d<=DJM;d++)
for(int i=1;i*d<=DJM;i++)
f[i*d]=(1ll*f[i*d]+1ll*mu[d]*F[i]%mod+mod)%mod;
for(int i=1;i<=DJM;i++) f[i]=(1ll*f[i]+f[i-1])%mod;
}
int DJ_pf(int n){
static int inv6=166666668;
if(n<=DJM) return f[n];
if(H.Find(n)!=-1) return H.Find(n);
int ret=(1ll*n*(n+1)%mod*(2*n+1)%mod*inv6%mod-3ll*(1+n)*n/2%mod+2ll*n%mod+mod)%mod;
for(int i=2,last;i<=n;i=last+1){
last=n/(n/i);
ret=(1ll*ret-1ll*(last-i+1)*DJ_pf(n/i)%mod+mod)%mod;
}
H.Push(n,ret);
return ret;
}
int main(){
Sieve(); int Case,n;
for(scanf("%d",&Case);Case;Case--){
scanf("%d",&n);
printf("%d\n",DJ_pf(n));
}
return 0;
}
●HDU 5608 function的更多相关文章
- HDU 5608 function [杜教筛]
HDU 5608 function 题意:数论函数满足\(N^2-3N+2=\sum_{d|N} f(d)\),求前缀和 裸题-连卷上\(1\)都告诉你了 预处理\(S(n)\)的话反演一下用枚举倍数 ...
- HDU 5608 - function
HDU 5608 - function 套路题 图片来自: https://blog.csdn.net/V5ZSQ/article/details/52116285 杜教筛思想,根号递归下去. 先搞出 ...
- [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 ...
- HDU 5608 function(莫比乌斯反演 + 杜教筛)题解
题意: 已知\(N^2-3N+2=\sum_{d|N}f(d)\),求\(\sum_{i=1}^nf(i) \mod 1e9+7\),\(n\leq1e9\) 思路: 杜教筛基础题? 很显然这里已经设 ...
- HDU 6038 - Function | 2017 Multi-University Training Contest 1
/* HDU 6038 - Function [ 置换,构图 ] 题意: 给出两组排列 a[], b[] 问 满足 f(i) = b[f(a[i])] 的 f 的数目 分析: 假设 a[] = {2, ...
- 洛谷P1464 Function HDU P1579 Function Run Fun
洛谷P1464 Function HDU P1579 Function Run Fun 题目描述 对于一个递归函数w(a,b,c) 如果a≤0 or b≤0 or c≤0就返回值11. 如果a> ...
- HDU 5875 Function 【倍增】 (2016 ACM/ICPC Asia Regional Dalian Online)
Function Time Limit: 7000/3500 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others)Total ...
- 2017 Multi-University Training Contest - Team 1 1006&&HDU 6038 Function【DFS+数论】
Function Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)Total ...
- HDU 5875 Function 优先队列+离线
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5875 Function Time Limit: 7000/3500 MS (Java/Others) ...
随机推荐
- C语言第三次作业总结
本次作业的亮点 总体情况 大部分同学基本掌握了单层循环结构的写法,懂得了代码调试的过程 PTA通过率及作业质量都不错,希望再接再厉 推荐博客 黄毓颖 推荐理由:代码思路清晰,格式良好:调试过程相当形象 ...
- C语言博客作业--函数
一.PTA实验作业 题目1 (6-7) (1).本题PTA提交列表 (2)设计思路 设计第一个函数判断是否完数int factorsum( int number ) 定义sum.i:sum初始化归0, ...
- Flask 学习 九 用户资料
资料信息 app/models.py class User(UserMixin,db.Model): #...... name = db.Column(db.String(64)) location ...
- jquery基本使用和实例
一.寻找元素 表单选择器 $(":input") //匹配所有 input, textarea, select 和 button 元素 $(":text") / ...
- 集合Collection总览
前言 声明,本文使用的是JDK1.8 从今天开始正式去学习Java基础中最重要的东西--->集合 无论在开发中,在面试中这个知识点都是非常非常重要的,因此,我在此花费的时间也是很多,得参阅挺多的 ...
- Thinkphp框架部署步骤
Thinkphp框架部署步骤 thinkphp框架部署起来简单,但是由于步骤较多也容易遗忘: 这是安装了集成环境后的一个www根目录结构: 然后需要在这个目录下面创建一个文件夹做项目:thinkphp ...
- emqtt 试用(六)系统主题
$SYS-系统主题 EMQ 消息服务器周期性发布自身运行状态.MQTT 协议统计.客户端上下线状态到 $SYS/ 开头系统主题. $SYS 主题路径以 "$SYS/brokers/{node ...
- HTTP协议扫盲(四)HTTP协议进阶 - MIME类型
一.概念和原理 1.什么是MIME类型? MIME类型,即多用途互联网邮件扩展,它是一个互联网标准,在1992年最早应用于电子邮件系统,但后来也应用到浏览器. 服务器会将它们发送的多媒体数据的类型告诉 ...
- spring-oauth-server实践:使用授权方式四:client_credentials 模式下access_token做业务!!!
spring-oauth-server入门(1-10)使用授权方式四:client_credentials 模式下access_token做业务!!! 准备工作 授权方式四::客户端方式: 服务网关地 ...
- NHibernate从入门到精通系列(2)——NHibernate环境与结构体系
内容摘要 NHibernate的开发环境 NHibernate的结构体系 NHibernate的配置 一.NHibernate的开发环境 NHibernate的英文官方网站为:http://nhfor ...