牛客练习赛84F-牛客推荐系统开发之下班【莫比乌斯反演,杜教筛】
正题
题目链接:https://ac.nowcoder.com/acm/contest/11174/F
题目大意
给出\(n,k\)求
\]
对\(10^9+9\)取模
其中\(f_i\)表示斐波那契数列的第\(i\)项
\(1\leq n,k\leq 10^8\)
解题思路
看上去就很莫比乌斯反演,首先把\(f\)提出来然后直接上莫反就是
\]
这个式子其实就可以直接做了,外面\(f_i\)是一个整除分块,然后里面的式子也是一个整除分块。需要的算法是一个矩阵乘法求斐波那契的前缀和(当然因为\(\sqrt 5\)在\(10^9+9\)下有二次剩余可以直接用特制方程求)还有一个杜教筛求\(\mu\)的前缀和。
因为整除分块套整除分块的复杂度是\(O(n^{\frac{3}{4}})\),然后最里面套个杜教筛复杂度不会大很多所以能过。
然后有一个大佬的做法是把上面那个式子化一下
\]
(相当于外面枚举\(i\times j\)然后枚举它的约数)
然后因为\(\mu*I=\epsilon\),所以\(f*\mu*I=f*\epsilon=f\)。所以如果在能快速求\(f\)的前缀和的情况下求\(f*\mu\)的前缀和可以用杜教筛来做。
然后上面那个式子整除分块一下就好了
代码的写法是第一种
code
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<map>
#define ll long long
using namespace std;
const ll N=5e6+10,S=3,P=1e9+9;
struct Matrix{
ll a[S][S];
}c,f,am;
ll n,k,ans,cnt,mu[N],pri[N/10];
bool v[N];map<ll ,ll >mp;
Matrix operator*(Matrix &a,Matrix &b){
memset(c.a,0,sizeof(c.a));
for(ll i=0;i<S;i++)
for(ll j=0;j<S;j++)
for(ll k=0;k<S;k++)
(c.a[i][j]+=a.a[i][k]*b.a[k][j]%P)%=P;
return c;
}
ll power(ll x,ll b){
ll ans=1;
while(b){
if(b&1)ans=ans*x%P;
x=x*x%P;b>>=1;
}
return ans;
}
ll Fbi(ll b){
memset(f.a,0,sizeof(f.a));
am.a[0][0]=am.a[0][2]=0;
am.a[0][1]=1;f.a[2][2]=1;
f.a[0][1]=1;f.a[1][1]=1;
f.a[1][0]=1;f.a[1][2]=1;
while(b){
if(b&1)am=am*f;
f=f*f;b>>=1;
}
return am.a[0][2];
}
void Prime(){
mu[1]=1;
for(ll i=2;i<N;i++){
if(!v[i])pri[++cnt]=i,mu[i]=-1;
for(ll j=1;j<=cnt&&i*pri[j]<N;j++){
v[i*pri[j]]=1;
if(i%pri[j]==0)break;
mu[i*pri[j]]=-mu[i];
}
}
for(ll i=1;i<N;i++)
mu[i]+=mu[i-1];
return;
}
ll GetMu(ll n){
if(n<N)return mu[n];
if(mp[n])return mp[n];
ll ans=1;
for(ll l=2,r;l<=n;l=r+1)
r=n/(n/l),ans=ans-(r-l+1)*GetMu(n/l);
return mp[n]=ans;
}
ll g(ll n){
ll ans=0;
for(ll l=1,r;l<=n;l=r+1){
r=n/(n/l);
ll tmp=GetMu(r)-GetMu(l-1);
ans=(ans+tmp*power(n/l,k)%P)%P;
}
return ans;
}
signed main()
{
Prime();
scanf("%lld%lld",&n,&k);
for(ll l=1,r;l<=n;l=r+1){
r=n/(n/l);
ll tmp=Fbi(r)-Fbi(l-1);
ans=(ans+tmp*g(n/l)%P)%P;
}
printf("%lld\n",(ans+P)%P);
return 0;
}
牛客练习赛84F-牛客推荐系统开发之下班【莫比乌斯反演,杜教筛】的更多相关文章
- 牛客小白月赛13-J小A的数学题 (莫比乌斯反演)
链接:https://ac.nowcoder.com/acm/contest/549/J来源:牛客网 题目描述 小A最近开始研究数论题了,这一次他随手写出来一个式子,∑ni=1∑mj=1gcd(i,j ...
- 牛客练习赛89E-牛牛小数点【数论】
正题 题目链接:https://ac.nowcoder.com/acm/contest/11179/E 题目大意 定义\(f(x)\)表示\(\frac{1}{x}\)的混循环节长度(如果没有循环节就 ...
- 【并查集缩点+tarjan无向图求桥】Where are you @牛客练习赛32 D
目录 [并查集缩点+tarjan无向图求桥]Where are you @牛客练习赛32 D PROBLEM SOLUTION CODE [并查集缩点+tarjan无向图求桥]Where are yo ...
- 牛客练习赛31 B 赞迪卡之声妮莎与奥札奇 逻辑,博弈 B
牛客练习赛31 B 赞迪卡之声妮莎与奥札奇 https://ac.nowcoder.com/acm/contest/218/B 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 2621 ...
- 牛客练习赛31 D 神器大师泰兹瑞与威穆 STL,模拟 A
牛客练习赛31 D 神器大师泰兹瑞与威穆 https://ac.nowcoder.com/acm/contest/218/D 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 26214 ...
- 最小生成树--牛客练习赛43-C
牛客练习赛43-C 链接: https://ac.nowcoder.com/acm/contest/548/C 来源:牛客网 题目描述 立华奏是一个刚刚开始学习 OI 的萌新. 最近,实力强大的 ...
- 牛客练习赛28-B(线段树,区间更新)
牛客练习赛28 - B 传送门 题目 qn姐姐最好了~ qn姐姐给你了一个长度为n的序列还有m次操作让你玩, 1 l r 询问区间[l,r]内的元素和 2 l r 询问区间[l,r]内的 ...
- 牛客练习赛26:D-xor序列(线性基)
链接:牛客练习赛26:D-xor序列(线性基) 题意:小a有n个数,他提出了一个很有意思的问题:他想知道对于任意的x, y,能否将x与这n个数中的任意多个数异或任意多次后变为y 题解:线性基 #inc ...
- [堆+贪心]牛客练习赛40-B
传送门:牛客练习赛40 题面: 小A手头有 n 份任务,他可以以任意顺序完成这些任务,只有完成当前的任务后,他才能做下一个任务 第 i 个任务需要花费 x_i 的时间,同时完成第 i 个任务的时间不 ...
随机推荐
- 什么是.NET CLI CLR IL JIT GC,它们是如何工作的
参考网址: https://cloud.tencent.com/developer/article/1432891 1:什么是.NET? NET 是 Microsoft 的用以创建 XML Web 服 ...
- springboot中添加事务注解
1.首先在service层中的方法前添加@Transactional @Service public class UserService { @Autowired private UserMapper ...
- C++ 计算MD5
头文件: #pragma once #ifndef MD5_H #define MD5_H #include <string> #include <fstream> /* Ty ...
- 【springcloud】springcloud与springboot的版本对应关系
官方网址:https://start.spring.io/actuator/info 更新时间:2019-12-01 spring-cloud: "Finchley.M2": &q ...
- 编译ffmpeg(第一次),实现JPG转MP4
ffpmeg网址:http://ffmpeg.org/ ffmpegapi文档:http://ffmpeg.org/doxygen/trunk/index.html 因为这是JPG转MP4,所以不涉及 ...
- 如何将eclipse中项目部署到tomcat
项目路径: \tmp0\wtpwebapps\test 复制test目录到 D:\software_install\apache-tomcat-8.0.33-windows-x64\apache-to ...
- MySQL的几种锁机制的使用介绍
锁 在日常的开发过程中,为了控制线程的并发肯定会用到锁机制.对于数据库而言,锁机制就是数据库为了保证数据的一致性,而使各种共享资源在被并发访问变得有序所设计的一种规则.当然MySQL也不例外,根据不同 ...
- Windows系统定时备份MySQL数据库
当一个网站投入使用时,定期备份数据库是必要的事.那么,在Windows系统上,我们该如何做呢? 如下语句可以实现备份及还原MySQL数据库: 备份MySQL数据库 mysqldump -uroot - ...
- elasticsearch支持大table格式数据的搜索
一.问题源起 数据情况 TableMeta, 保存table的元数据,通过fileId关联具体的GridFS文件: id name creator fileId 1 table1 mango f1 2 ...
- docker镜像与容器的导出导入
导入导出涉及的命令有save.load.export.import # 1) docker save 导出镜像到文件 docker save -o nginx.tar nginx:latest # 2 ...