博主鏈結
給乙個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 ...