洛谷 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(n?1)+f(n?2)

其中 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[x?1]+bf[x]=>bf[x]=k?af[x?1]=>b=(k?af[x?1])/f[x]因為a,b正整數的緣故。k?af[x?1]0(modf[x])=>kaf[x?1](modf[x]),因為gcd(f[x],f[x?1])=1a(k?f?1[x?1](modf[x]))(modf[x])并且要保證b>0,即判斷a<k/f[x?1]

# 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.pswp.cn/diannao/73925.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/73925.shtml
英文地址,請注明出處:http://en.pswp.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; 最優子結構&…