NowCoder數列(矩陣快速冪變式)

2022-05-24 19:27:10 字數 1056 閱讀 6741

時間限制 3000 ms 記憶體限制 32768 kb **長度限制 100 kb 

nowcoder最近在研究乙個數列:

* f(0) = 7

* f(1) = 11

* f(n) = f(n-1) + f(n-2) (n≥2)

他稱之為nowcoder數列。請你幫忙確認一下數列中第n個數是否是3的倍數。

輸入包含多組資料。

每組資料報含乙個整數n,(0≤n≤1000000)。

對應每一組輸入有一行輸出。

如果f(n)是3的倍數,則輸出「yes」;否則輸出「no」。

012

345

no

noyes

nono

no

題解:我最初的想法是肯定是矩陣快速冪的變式題,就想用矩陣快速冪,並且可以回顧一下矩陣快速冪,但是發現這題沒我想的那麼簡單,我忽略的點在於取模的時候是對1000000007取得,不是足夠大,會出現1000000007*3的倍數的情況,然後改成了0x3f3f3f3f再對3取模就可以了,當然網上有更為簡單的方法,是找規律的,但是我覺得可以當作矩陣快速冪的變式練習來做。

ps:最近身體真的每況愈下。。。要加強鍛鍊了。

附上**:

#include#include#include#include#define mod 0x3f3f3f3f

using namespace std;

typedef long long int ll;

int flag;

struct mat

ans,res;

mat mul(mat x,mat y)

} }return t;

}void quickmod(long long int n)

res=mul(res,res);

n>>=1;

} }

int main()

else if(n==1)

else

else}}

return 0;

}

fibonacci數列矩陣快速冪

對於矩陣 1 1 1 0 的n次冪,第一行第二個元素 右上角 的元素即為fibonacci數列的第n項,由此可以根據矩陣的乘法計算fibonacci數列的元素值 矩陣的快速冪利用的也是冪乘的二分法,只不是換成了矩陣的乘法,可以用函式處理。可以定義乙個二維陣列的結構體 typedef struct m...

矩陣快速冪 數列考驗

題面 當 x 10 時,f x x 當 x 10 時,f x a0 f x 1 a1 f x 2 a2 f x 3 a9 f x 10 ai 只能為 0 或 1。現在給定 a0 a9,以及兩個正整數 k m,詢問 f k m 的數值大小 輸出檔案包含多組測試用例,每組測試用例格式如下 第一行給定兩個...

Fibonacci數列(矩陣乘法快速冪)

題目描述 定義 f0 f1 1,fn fn 1 fn 2 n 2 稱為fibonacci數列。輸入n,求fn mod q。其中1 q 30000。輸入描述 第一行乙個數t 1 t 10000 以下t行,每行兩個數,n,q n 109,1 q 30000 輸出描述 檔案包含t行,每行對應乙個答案。樣例...