51Nod 1537 分解(矩陣快速冪)

2021-08-30 17:56:03 字數 1502 閱讀 2039

博主鏈結

給乙個n,求出對應m滿足(1+sqrt(2))^n==sqrt(m)+sqrt(m-1)

可以將(1+sqrt(2))^n一項項拆開後發現

sqrt(1)+sqrt(2)

sqrt(9)+sqrt(8)

sqrt(49)+sqrt(50)

sqrt(492+9)+sqrt(492+10)

發現如果n為奇數f(n)=f(n-2)+2f(n-1)+1;

為偶數時f(n)=f(n-2)+2f(n-1);

所以可以推出狀態轉移矩陣

2 1

1 0

#include

#include

#define ll long long int

using namespace std;

const

int n =

1e9+7;

void

matrix(ll

(&a)[2

][2]

, ll b[2]

[2])

;for

(int i =

0; i <2;

++i)

for(

int j =

0; j <2;

++j)

for(

int k =

0; k <2;

++k)

tmp[i]

[j]=

(tmp[i]

[j]+ a[i]

[k]* b[k]

[j])

% n;

for(

int i =

0; i <2;

++i)}}

intmain()

, cot[2]

[2]=

, x[2]

=;//f(n)=2*f(n-1)+f(n-2) if(n%2) ans=f(n)*f(n)+1 else ans=f(n)*f(n)

if(n ==1)

n -=2

;while

(n) ll ans =0;

for(

int i =

0; i <

2; i++

)ans =

(ans + x[i]

* cot[0]

[i])

% n;

ans =

(ans%n)

*(ans%n)

%n;if

(flag) ans+=1

;printf

("%lld\n"

, ans)

;return0;

}

51nod 1537 分解(矩陣快速冪)

參考 標程中提到了構造對偶式,我去,這咋整啊,搞不了 但是就根據標程來推,這些東西都能推出來。奇偶都能推出來sqrt m sqrt m 1 a b sqrt 2 然後根據 1 2 n a b 2打個表,找規律就好了。找不到規律的話,拿著序列去oeis一查就知道了 include using name...

51nod 1573 分解 矩陣快速冪

51nod 演算法馬拉松17 告別奧運 b 分解 51nod 演算法馬拉松17 告別奧運 b 分解 題意 給出乙個 n 問 1 2 n能否拆成m m 1 的形式,如果能,輸出 m 否則輸出 no。想法觀察 1 2 n,它總能寫成a b2 的形式,如果a2 n m,2 b2 n m 1 或者a2 n ...

51Nod 1113 矩陣快速冪

acm模版 模版題,矩陣快速冪,很直白的一道題。需要好好研究一下矩陣的知識了 include using namespace std define maxn 111 define mod x x mod define mod 1000000007 define ll long long int n ...