1.题目

\[\sum_{i=1}^n \sum_{j=1}^m \gcd(F_i,F_j)
\]

其中 \(F_k\) 表示斐波那契数列的第 \(k\) 项,对 \(10^9 + 7\) 取模。

多组数据。

2.题解

莫比乌斯反演板子题,但是太菜了,多做了一次反演,复杂度变为 \(tn\sqrt{n}\) 。实际是 \(t\sqrt{n}\)

直接推式子吧。

首先需要知道性质,\(\gcd(F_i,f_j)=F_{\gcd(i,j)}\)

这个性质是一道板子题,为洛谷上的斐波那契公约数,证明简单,本文略过。

\[Ans=\sum_{i=1}^n\sum_{j=1}^m \gcd(F_i,F_j)
\]
\[=\sum_{i=1}^n\sum_{j=1}^mF_{\gcd(i,j)}
\]

我们发现 \(\gcd(i,j)\) 只有可能在 \(1\sim\min(n,m)\) 于是我们可以考虑去枚举这个 \(\gcd(i,j)\) ,然后乘上所对应的值,这样既为答案。

也就是说,写成这样(假设 \(n \leq m\)):

\(f(k)\) 表示的是公约数为 \(k\) 的数量。

\[Ans=\sum_{k=1}^n F(k)f(k)
\]

问题关键在于求 \(f(k)\) 。

\[Ans =\sum_{k=1}^n F(k) \sum_{i=1}^n\sum_{j=1}^m [(i,j)=k]
\]

容易发现这就是一个嵌入式反演的变形,那么直接上莫比乌斯反演。

\[=\sum_{k=1}^n F(k) \sum_{k|i}^n\sum_{k|j}^m[(i,j)=k]
\]
\[=\sum_{k=1}^n F(k) \sum_{i=1}^{n/k}\sum_{j=1}^{m/k}[(ik,jk)=k]
\]

发现可以将 \(k\) 约掉,也就是:

\[=\sum_{k=1}^n F(k) \sum_{i=1}^{n/k}\sum_{j=1}^{m/k}[(i,j)=1]
\]

变为经典反演形式,开始进行反演。

\[Ans=\sum_{k=1}^n F(k) \sum_{i=1}^{n/k}\sum_{j=1}^{m/k} \sum_{d|(i,j)} \mu(d)
\]
\[Ans=\sum_{k=1}^n F(k) \sum_{i=1}^{n/k}\sum_{j=1}^{m/k} \sum_{{d|i,}{d|j}} \mu(d)
\]

然后改变枚举变量。

\[Ans=\sum_{k=1}^n F(k) \sum_{d=1}^{n/k} \mu(d) \sum_{d|(n/k)}\sum_{d|(m/k)}1
\]

也就是:

\[Ans=\sum_{k=1}^n F(k) \sum_{d=1}^{n/k} \mu(d) \lfloor \dfrac{n}{k} \rfloor\lfloor \dfrac{m}{k} \rfloor
\]

然后交换求和顺序,以及内部改为枚举因数,最外层枚举 \(d\) ,就有:

\[Ans=\sum_{d=1}^n \lfloor \dfrac{n}{d} \rfloor \lfloor \dfrac{m}{d} \rfloor \sum_{k|d} F_k \mu(\dfrac{k}{d})
\]

然后就预处理前缀和,然后套路整除分块回答。

时间复杂度为 \(t\sqrt{n}+nlogn\)

#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N = 1e6+99 ,mod = 1e9+7;
int e[N+4],p[N+4],mu[N+4],tn;
void mobius(int n){
e[1]=1;mu[1]=1;
for(int i=2;i<=n;i++){
if(!e[i]){mu[i]=-1;p[++tn]=i;}
for(int j=1;j<=tn;j++){
if(i*p[j]>n) break;
mu[p[j]*i]=(i%p[j]==0 ? 0 :-mu[i]);
e[p[j]*i]=1;
if(i%p[j]==0) break;
}
}
}
int g[N+4],T,n,m,fib[N+4];
signed main(){
freopen("fibonacci.in","r",stdin);
freopen("fibonacci.out","w",stdout);
ios::sync_with_stdio(0);cin.tie(0),cout.tie(0);
mobius(N);
cin>>T;
fib[1]=1,fib[2]=1;
for(int i=3;i<=N;i++){
fib[i]=fib[i-1]+fib[i-2];
fib[i]%=mod;
}
for(int i=1;i<=N;i++){
for(int j=i;j<=N;j+=i){
g[j]=(g[j]+fib[i]*mu[j/i]%mod+mod)%mod;
}
}
for(int i=1;i<=N;i++)
g[i]=(g[i]+g[i-1])%mod;
while(T--){
cin>>n>>m;
int ans=0;
for(int l=1,r=0;l<=min(n,m);l=r+1){
r=min(n/(n/l),m/(m/l));
ans=(ans+(n/l)*(m/l)%mod*(g[r]-g[l-1])%mod+mod)%mod; }
cout<<ans<<"\n";
}
return 0;
}

NOIP模拟赛T3 斐波那契的更多相关文章

  1. 关于斐波那契数列的一些恒等式 模板 牛客OI测试赛 A 斐波拉契

    牛客A 斐波拉契 链接:https://www.nowcoder.com/acm/contest/181/A来源:牛客网 设f[i]表示斐波那契数论的第i项 f[1]=1,f[2] =1,f[i] = ...

  2. 20161005 NOIP 模拟赛 T3 解题报告

    subset 3.1 题目描述 一开始你有一个空集,集合可以出现重复元素,然后有 Q 个操作 1. add s 在集合中加入数字 s. 2. del s 在集合中删除数字 s.保证 s 存在 3. c ...

  3. ztz11的noip模拟赛T3:评分系统

    代码: #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> ...

  4. 【2019.7.25 NOIP模拟赛 T3】树(tree)(dfs序列上开线段树)

    没有换根操作 考虑如果没有换根操作,我们该怎么做. 我们可以求出原树的\(dfs\)序列,然后开线段树维护. 对于修改操作,我们可以倍增求\(LCA\),然后在线段树上修改子树内的值. 对于询问操作, ...

  5. 神奇的NOIP模拟赛 T3 LGTB 玩THD

    LGTB 玩THD LGTB 最近在玩一个类似DOTA 的游戏名叫THD有一天他在守一座塔,对面的N 个小兵排成一列从近到远站在塔前面每个小兵有一定的血量hi,杀死后有一定的金钱gi每一秒,他都可以攻 ...

  6. 【2019.8.20 NOIP模拟赛 T3】小X的图(history)(可持久化并查集)

    可持久化并查集 显然是可持久化并查集裸题吧... 就是题面长得有点恶心,被闪指导狂喷. 对于\(K\)操作,直接\(O(1)\)赋值修改. 对于\(R\)操作,并查集上直接连边. 对于\(T\)操作, ...

  7. 【2019.7.26 NOIP模拟赛 T3】化学反应(reaction)(线段树优化建图+Tarjan缩点+拓扑排序)

    题意转化 考虑我们对于每一对激活关系建一条有向边,则对于每一个点,其答案就是其所能到达的点数. 于是,这个问题就被我们搬到了图上,成了一个图论题. 优化建图 考虑我们每次需要将一个区间向一个区间连边. ...

  8. [NOIP1997] P2626 斐波那契数列(升级版)

    题目背景 大家都知道,斐波那契数列是满足如下性质的一个数列: • f(1) = 1 • f(2) = 1 • f(n) = f(n-1) + f(n-2) (n ≥ 2 且 n 为整数). 题目描述 ...

  9. noip模拟赛 斐波那契

    分析:暴力分有90,真良心啊. a,b这么大,连图都建不出来,肯定是有一个规律.把每个点的父节点写出来:0 1 1 12 123 12345 12345678,可以发现每一个循环的长度刚好是斐波那契数 ...

随机推荐

  1. TensorFlow文本情感分析实现

    TensorFlow文本情感分析实现 前面介绍了如何将卷积网络应用于图像.本文将把相似的想法应用于文本. 文本和图像有什么共同之处?乍一看很少.但是,如果将句子或文档表示为矩阵,则该矩阵与其中每个单元 ...

  2. MinkowskiEngine demo ModelNet40分类

    MinkowskiEngine demo ModelNet40分类 本文将看一个简单的演示示例,该示例训练用于分类的3D卷积神经网络.输入是稀疏张量,卷积也定义在稀疏张量上.该网络是以下体系结构的扩展 ...

  3. OpenCV读写视频文件解析(二)

    OpenCV读写视频文件解析(二) VideoCapture::set 设置视频捕获中的属性. C++:bool VideoCapture::set(int propId, double value) ...

  4. DHCP的原理与配置

    DHCP 动态主机配置协议(Dynamic Host Configuration Protocol) 可以减少管理员的工作量 避免用户手工配置网络参数时造成的地址冲突 DHCP报文类型: 报文类型   ...

  5. 「题解」NWRRC2017 Joker

    本文将同步发布于: 洛谷博客: csdn: 博客园: 简书. 题目 题目链接:洛谷 P7028.gym101612J. 题意概述 有一个长度为 \(n\) 的数列,第 \(i\) 个元素的值为 \(a ...

  6. 十、构建memcached服务

    装包-------配置----起服务---验证   装包: [root@proxy ~]# yum -y  install   memcached    //安装软件包memcached [root@ ...

  7. 使用VS code编写C++无法实时检测代码的解决办法

    更新:其实微软是有官方文档配置VS code 的C++的.地址是: https://code.visualstudio.com/docs/cpp 更改工作区后就发现不能再使用VS CODE愉快地写C+ ...

  8. 【Azure 机器人】微软Azure Bot 编辑器系列(2) : 机器人/用户提问回答模式,机器人从API获取响应并组织答案 (The Bot Framework Composer tutorials)

    欢迎来到微软机器人编辑器使用教程,从这里开始,创建一个简单的机器人. 在该系列文章中,每一篇都将通过添加更多的功能来构建机器人.当完成教程中的全部内容后,你将成功的创建一个天气机器人(Weather ...

  9. docker安装nextcloud私人网盘,开启https配置证书

    docker安装nextcloud私人网盘 之前一直用的百度网盘最近svip超级会员到期了,续费要¥199元,对于一个打工人的我来说有点儿贵.作为技术人的一员,我就来发挥发挥自己的长处,来搭建一个私人 ...

  10. Docker 版 3分钟部署 .net core 开源在线客服系统,他来了

    我在博客园发表了一系列文章,开始介绍基于 .net core 的在线客服系统开发过程. 前些天又应朋友的要求,发了一篇 CentOS 版本的安装部署教程:https://www.cnblogs.com ...