P1349 廣義斐波那契數列(矩陣乘法)

来源:https://www.cnblogs.com/lykkk/archive/2019/07/12/11173985.html
-Advertisement-
Play Games

題目 "P1349 廣義斐波那契數列" 解析 把普通的矩陣乘法求斐波那契數列改一改,隨便一推就出來了 $$\begin{bmatrix}f_2\\f_1 \end{bmatrix}\begin{bmatrix} p&q\\ 1&0\\ \end{bmatrix}^{n 2}=\begin{bmatr ...


題目

P1349 廣義斐波那契數列

解析

把普通的矩陣乘法求斐波那契數列改一改,隨便一推就出來了
\[\begin{bmatrix}f_2\\f_1 \end{bmatrix}\begin{bmatrix} p&q\\ 1&0\\ \end{bmatrix}^{n-2}=\begin{bmatrix}f_n\\f_{n-1} \end{bmatrix}\]
水題

代碼

#include <bits/stdc++.h>
#define int long long

using namespace std;

const int N = 100;

int n, m, a1, a2, p, q;

struct matrix {
    int a[N][N];
    matrix() {
        memset(a, 0, sizeof a);
    }

    void InitMatrix() {
        a[1][1] = p, a[1][2] = q;
        a[2][1] = 1;
    }

    matrix operator * (const matrix &oth) const {
        matrix ans;
        for (int k = 1; k <= 2; ++k)
            for (int i = 1; i <= 2; ++i)
                for (int j = 1; j <= 2; ++j)
                    ans.a[i][j] = (ans.a[i][j] + (a[i][k] * oth.a[k][j]) % m) % m;
        return ans;
    }

} init;

matrix qpow(matrix a, int b) {
    matrix ans = init;
    while (b) {
        if (b & 1) ans = ans * a;
        b >>= 1, a = a * a;
    }
    return ans;
}

template<class T>inline void read(T &x) {
    x = 0; int f = 0; char ch = getchar();
    for ( ; !isdigit(ch); ch = getchar()) f |= (ch == '-');
    for ( ; isdigit(ch); ch = getchar()) x = x * 10 + ch - '0';
    x = f ? -x : x;
    return;
}

signed main() {
    read(p), read(q), read(a1), read(a2), read(n), read(m);
    if (n <= 2) {
        printf("%lld", n == 1 ? a1 : a2);
        return 0;
    }
    init.InitMatrix();
    init = qpow(init, n - 3);
    printf("%lld\n", (a2 * init.a[1][1] + a1 * init.a[1][2]) % m);
    return 0;
}

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一些討論 1. [Python中使用配置文件的最佳實踐][1] 2. [Python中使用配置文件的最好方法][2] 3. [Python符號常量][3] 4. [多種配置文件方案對比][4] [1]: %20%E5%8F%82%E8%A7%81SO%E7%9A%84%E8%AE%A8%E8%AE% ...
  • 1.代碼生成器: [正反雙向](單表、主表、明細表、樹形表,快速開發利器)freemaker模版技術 ,0個代碼不用寫,生成完整的一個模塊,帶頁面、建表sql腳本、處理類、service等完整模塊2.多數據源:(支持同時連接無數個資料庫,可以不同的模塊連接不同數的據庫)支持N個數據源3.阿裡資料庫連 ...
  • 本文為本次系列文章的第一篇,接下來,小編預計用一周的時間,帶大家重新解讀二十三中設計模式。 ...
  • 線程通信的方式 要想實現線程之間的協同, 如: 線程先後執行順序, 獲取某個線程的執行結果等, 涉及線程之間的相互通信, 分為下麵四類 文件共用 網路共用 變數共用 JDK提供的線程協調API 細分為: suspend/resume, wait/notify, park/unpark 文件共用 變數 ...
  • "小菜鳥的個人博客" 模式的起源 模式 起源於建築學。20世紀70年代,哈佛大學建築學博士Christopher Alexander和他的團隊花大約20年,來研究為解決同一個問題而設計出的不同建築結構,從中發現那些高質量設計中的相似性,並且用模式來指代這種相似性; JavaScript是一門 "[1 ...
  • python零基礎系統學習路線圖,Python語言無所不包,能做非常多的事情,適合各類企業的開發工作,學好Python,前途寬廣! python零基礎系統學習路線圖,Python語言無所不包,能做非常多的事情,適合各類企業的開發工作,學好Python,前途寬廣! python零基礎系統學習路線圖,P ...
  • 看過這篇文章,大廠面試你「雙親委派模型」,硬氣的說一句,你怕啥? 讀該文章姿勢 1. 打開手頭的 IDE,按照文章內容及思路進行代碼跟蹤與思考 2. 手頭沒有 IDE,先收藏,回頭看 (萬一哪次面試問了呢) 3. 需要查看和拷貝代碼,點擊文章末尾出「閱讀原文」 文章內容相對較長,所以添加了目錄,如果 ...
  • 第二種方法:對進行奇數倍n分頻時鐘,首先進行n/2分頻(帶小數,即等於(n-1)/2+0.5),然後再進行二分頻得到。得到占空比為50%的奇數倍分頻。下麵講講進行小數分頻的設計方法。 小數分頻:首先講講如何進行n+0.5分頻,這種分頻需要對輸入時鐘進行操作。基本的設計思想:對於進行n+0.5分頻,首 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...