洛谷 P3986 斐波那契数列

P3986 斐波那契数列

题目描述

定义一个数列:
f ( 0 ) = a , f ( 1 ) = b , f ( n ) = f ( n − 1 ) + f ( n − 2 ) f(0) = a, f(1) = b, f(n) = f(n - 1) + f(n - 2) f(0)=a,f(1)=b,f(n)=f(n1)+f(n2)

其中 a, b 均为正整数,n ≥ 2

问有多少种 (a, b),使得 k 出现在这个数列里,且不是前两项。

由于答案可能很大,你只需要输出答案模 10^9 + 7 的结果即可。

输入格式

一行一个整数 k

输出格式

一行一个数,表示答案模 10^9 + 7的结果。

输入输出样例 1

输入 1

19260817

输出 1

34166325

输入输出样例 2

输入 2

1000000000

输出 2

773877569

说明/提示

1 ≤ k ≤ 10^9

EXP:

针对于该函数数列中的数据分别为 : a + b , a + 2 b , 2 a + 3 b , 3 a + 5 b 即 a , b 的系数是斐波那契数列的数据。 1 ≤ k ≤ 1 0 9 , 针对 40 项左右的斐波那契数就已经超过该范围,并且 a , b 都是正整数。所以可以遍历斐波那契数列判断 a . k = a f [ x − 1 ] + b f [ x ] = > b f [ x ] = k − a f [ x − 1 ] = > b = ( k − a f [ x − 1 ] ) / f [ x ] 因为 a , b 正整数的缘故。 k − a f [ x − 1 ] ≡ 0 ( m o d f [ x ] ) = > k ≡ a f [ x − 1 ] ( m o d f [ x ] ) , 因为 g c d ( f [ x ] , f [ x − 1 ] ) = 1 a ≡ ( k ∗ f − 1 [ x − 1 ] ( m o d f [ x ] ) ) ( m o d f [ x ] ) 并且要保证 b > 0 , 即判断 a < k / f [ x − 1 ] 针对于该函数数列中的数据分别为:a+b,a+2b,2a+3b,3a+5b即a,b的系数是斐波那契数列的数据。\\ 1≤k≤10^9,针对40项左右的斐波那契数就已经超过该范围,并且a,b都是正整数。所以可以遍历斐波那契数列判断a.\\ k = af[x-1] + bf[x]=>bf[x] = k - af[x-1]=>b=(k-af[x-1])/f[x]因为a,b正整数的缘故。\\ k-af[x-1]\equiv0(modf[x])=>k\equiv af[x-1](modf[x]),因为gcd(f[x],f[x-1])=1\\ a\equiv (k * f^{-1}[x-1](modf[x]))(modf[x])并且要保证b >0,即判断a<k/f[x-1] 针对于该函数数列中的数据分别为:a+b,a+2b,2a+3b,3a+5ba,b的系数是斐波那契数列的数据。1k109,针对40项左右的斐波那契数就已经超过该范围,并且a,b都是正整数。所以可以遍历斐波那契数列判断a.k=af[x1]+bf[x]=>bf[x]=kaf[x1]=>b=(kaf[x1])/f[x]因为a,b正整数的缘故。kaf[x1]0(modf[x])=>kaf[x1](modf[x]),因为gcd(f[x],f[x1])=1a(kf1[x1](modf[x]))(modf[x])并且要保证b>0,即判断a<k/f[x1]

# coding: utf-8
MOD = 10 ** 9 + 7def gcd_extended(a,b):"""扩展欧几里得算法返回一个元组(d,x,y) 使得 d = gcd(a,b) = ax + by"""if a == 0:return (b,0,1)gcd , x1 , y1 = gcd_extended(b % a , a)x = y1 - (b // a) * x1y = x1return (gcd,x,y)def mod_inverse(a,m):"""求模逆元使用扩展欧几里得算法返回a在m下的逆元如果没有逆元返回None"""gcd, x, y = gcd_extended(a,m)if gcd != 1:return None # 如果a 和 m不互素else:return x % m # 返回逆元def matrix_mul(A, B):"""矩阵乘法"""return [[sum(a * b for a, b in zip(col, row)) for col in zip(*B)] for row in A]def matrix_pow(A, n):"""矩阵快速幂"""size_ = len(A)if n == 0:res = [[0 for _ in range(size_)] for _ in range(size_)]for i in range(size_):res[i][i] = 1elif n == 1:return Aelse:y = matrix_pow(A, n // 2)if n & 1:return matrix_mul(matrix_mul(y, y), A)return matrix_mul(y, y)K = int(input())
counter = 0
A = [[0, 1],[1, 1]
]
# 遍历前面的斐波那契数列
for i in range(2,42):temp = matrix_mul([[0,1]],matrix_pow(A,i - 1))f_x = temp[0][1]f_x_1 = temp[0][0]# 计算范围内最小的aa = (K * mod_inverse(f_x_1,f_x)) % f_x# 求取k / f[x-1]	由于向下取整,所以b > 0时要求是个足够大的正整数target = K // f_x_1 - 1if a < target:# 如果a = 0则a本身不在计算if a == 0:counter -= 1# 根据a的大小,加上a + k_counter * f[x] 的所有acounter = (counter + 1 + (target - a) // f_x) % MOD
print(counter)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/73925.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【java面型对象进阶】------继承实例

继承结构下的标准Javabean 代码如下&#xff1a; package demo10;//定义员工父类 public class Employee {private String id;private String name;private double salary;//构造方法public Employee(){}public Employee(String id,String name,double salary){this.idid;thi…

Vitis 2024.1 无法正常编译custom ip的bug(因为Makefile里的wildcard)

现象&#xff1a;如果在vivado中&#xff0c;添加了自己的custom IP&#xff0c;比如AXI4 IP&#xff0c;那么在Vitis&#xff08;2024.1&#xff09;编译导出的原本的.xsa的时候&#xff0c;会构建build失败。报错代码是&#xff1a; "Compiling blank_test_ip..."…

【图论】并查集的学习和使用

目录 并查集是什么&#xff1f; 举个例子 组成 父亲数组&#xff1a; find函数&#xff1a; union函数&#xff1a; 代码实现&#xff1a; fa[] 初始化code: find code&#xff1a; 递归实现: 非递归实现: union code : 画图模拟&#xff1a; 路径压缩&#xff1a…

Java使用FFmpegFrameGrabber进行视频拆帧,结合Thumbnails压缩图片保存到文件夹

引入依赖 <dependency><groupId>net.coobird</groupId><artifactId>thumbnailator</artifactId><version>0.4.17</version></dependency><dependency><groupId>org.bytedeco</groupId><artifactId>ja…

mysql与redis的日志策略

MySQL 和 Redis 在日志记录方面采用了不同的策略&#xff0c;分别对应写前日志&#xff08;Write-Ahead Logging, WAL&#xff09;和写后日志&#xff08;Write-After Logging&#xff09;。以下是它们的详细说明&#xff1a; 1. MySQL&#xff1a;写前日志&#xff08;Write-A…

nacos安装,服务注册,服务发现,远程调用3个方法

安装 点版本下载页面 服务注册 每个微服务都配置nacos的地址&#xff0c;都要知道 服务发现 2个是知道了解 远程调用基本实现 远程调用方法2&#xff0c;负载均衡API测试 远程调用方法3&#xff0c;注解 负载均衡的远程调用&#xff0c; 总结 面试题

Ubuntu Qt: no service found for - “org.qt-project.qt.mediaplayer“

1、前言 在一次项目过程中&#xff0c;因项目需求&#xff0c;需要将windows开发的Qt项目迁移到ubuntu系统中&#xff0c;且在某个功能项中需要播放音频&#xff0c;在windows系统中能够正常运行&#xff0c;但在ubuntu系统中却显示defaultServiceProvider::requestService(): …

Blender制作次表面材质

效果: 主要用沃罗诺伊纹理做出云絮感 然后EV开启次表面设置

用 pytorch 从零开始创建大语言模型(四):从零开始实现一个用于生成文本的GPT模型

从零开始创建大语言模型&#xff08;Python/pytorch &#xff09;&#xff08;四&#xff09;&#xff1a;从零开始实现一个用于生成文本的GPT模型 4 从零开始实现一个用于生成文本的GPT模型4.1 编写 L L M LLM LLM架构4.2 使用层归一化对激活值进行标准化4.3 使用GELU激活函数…

vmware tools灰化

Windows7 32位的某些版本&#xff0c;已经不被vmware支持。下面是解决方法&#xff1a; 安装kb4474419补丁包&#xff1a;https://www.catalog.update.microsoft.com/Search.aspx?qKB4474419网络共享。必须要虚拟机和主机可通信。此方法不错&#xff0c;但是操作起来太麻烦。…

ubuntu高并发内核参数调优 - (压测客户端调优)

业务上要求集群提供10w并发&#xff0c;10w并发听上去不是很难&#xff0c;但10w并发持续1小时呢 在业务上线之前还需要我们自己对业务进行压测&#xff0c;俗称benchmark。 压测的服务器也是需要进行性能调优的&#xff0c;以下列出调优前后的参数对比&#xff0c;更直观的分析…

html5制作2048游戏开发心得与技术分享

2048游戏开发心得与技术分享 这里写目录标题 2048游戏开发心得与技术分享项目概述技术架构1. 核心技术栈2. 项目结构 核心功能实现1. 数据结构设计2. 移动逻辑实现3. 触摸支持 性能优化1. DOM操作优化2. 事件处理优化 开发心得1. 代码组织2. 调试技巧3. 用户体验优化 项目亮点技…

dify+deepseek联网搜索:免费开源搜索引擎Searxng使用(让你的大模型也拥有联网的功能)

docker安装SearXng 项目地址:https://github.com/searxng/searxng-docker 第一步 git clone下来 git clone https://github.com/searxng/searxng-docker.git第二步 进入 searxng-docker目录中修改docker-compose.yaml(直接复制粘贴) cd searxng-dockerdocker-compose.yaml …

docker的anythingllm和open-webui压缩包分享(国内镜像拉取,百度云压缩包分享)

文章目录 前言第一部分&#xff1a;镜像获取&#x1f680; 方式一&#xff1a;切换国内下载镜像✅1. 下载anythingllm✅ 2. 下载open-webui &#x1f680;方式二&#xff1a;下载我分享的百度云✅ anythingllm压缩包百度云链接❎ open-webui压缩包 第二部分&#xff1a;下载之后…

DeepSeek-R1深度解读

deepseek提出了一种通过强化学习&#xff08;RL&#xff09;激励大语言模型&#xff08;LLMs&#xff09;推理能力的方法&#xff0c;个人认为最让人兴奋的点是&#xff1a;通过RL发现了一个叫“Aha Moment”的现象&#xff0c;这个时刻发生在模型的中间版本中。在这个阶段&…

从零实现B站视频下载器:Python自动化实战教程

一、项目背景与实现原理 1.1 B站视频分发机制 Bilibili的视频采用 音视频分离技术,通过以下方式提升用户体验: 动态码率适配(1080P/4K/HDR) 分段加载技术(基于M4S格式) 内容保护机制(防盗链/签名验证) 1.2 技术实现路线 graph TDA[模拟浏览器请求] --> B[获取加密…

AJAX的理解和原理还有概念

你想问的可能是 AJAX&#xff08;Asynchronous JavaScript and XML&#xff09; &#xff0c;它并不是一门新的编程语言&#xff0c;而是一种在无需重新加载整个网页的情况下&#xff0c;能够与服务器进行异步通信并更新部分网页的技术。以下从基本概念、原理、优点、使用场景等…

封装一个分割线组件

最终样式 Vue2代码 <template><div class"sep-line"><div class"sep-label"><span class"sep-box-text"><slot>{{ title }}</slot> <!-- 默认插槽内容&#xff0c;如果没有传递内容则使用title -->&…

Redis基本命令手册——五大类型

目录 一&#xff1a;基本操作 二&#xff1a;字符串&#xff08;String&#xff09; 三&#xff1a;哈希&#xff08;Hash) 四&#xff1a;列表&#xff08;List&#xff09; 五&#xff1a;集合&#xff08;Set&#xff09; 六&#xff1a;有序集合&#xff08;Zset&…

【C++】动态规划从入门到精通

一、动态规划基础概念详解 什么是动态规划 动态规划&#xff08;Dynamic Programming&#xff0c;DP&#xff09;是一种通过将复杂问题分解为重叠子问题&#xff0c;并存储子问题解以避免重复计算的优化算法。它适用于具有以下两个关键性质的问题&#xff1a; 最优子结构&…