求\(\sigma i\times fib[i]\)的值
\(n\le2^-1\)
看資料範圍就會做的題...
\[設\\
f(n):=ib[n]
\\g(n)=nf(n)
\\s(n)=\sigma^_g(n)
\]然後
\[f(i)=f(i-1)+f(i-2)
\\s(i)=s(i-1)+g(i)
\]不好求\(g\),但是可以直接這樣
\[g(i)=i\times f(i)\\
=i\times f(i-1)+i\times f(i-2)
\\=(i-1)f(i-1)+(i-2)f(i-2)+f(i-1)+2f(i-2)
\\=g(i-1)+g(i-2)+f(i-1)+2f(i-2)
\]於是我們構造乙個行向量(矩陣)
\[k=\begin
\\g(i)&g(i+1)&f(i)&f(i+1)&s(i)&s(i+1)
\\\\
\end
\]然後想辦法構造乙個轉移矩陣
\[k \times \begin?\end=\begin
\\g(i+1)&g(i+2)&f(i+1)&f(i+2)&s(i+1)&s(i+2)
\\\\
\end
\]就直接根據轉移式構造一下
\[\begin?\end=
\begin
0&1&0&0&0&1
\\1&1&0&0&0&1
\\0&2&0&1&0&2
\\0&1&1&1&0&1
\\0&0&0&0&0&0
\\0&0&0&0&1&1
\end
\]初始矩陣是
\[\begin
\\1&2&1&1&1&3
\\\\
\end
\]最後直接取出第五列就好了(\(s(i)\))
#includeusing namespace std;typedef long long ll;
template < class ccf >
inline ccf qr(ccf b)
inline int qr()
int mod,n;
const int maxn=7;
struct mtx
inline int* operator (register int x)
inline void unis()
inline void operator*=(mtx& f)
inline void operator ^=(const int&p)
}yyb;
ll vec[7]=;
int main()
yyb[1][1]=0;yyb[1][2]=1;yyb[1][3]=0;yyb[1][4]=0;yyb[1][5]=0;yyb[1][6]=1;
yyb[2][1]=1;yyb[2][2]=1;yyb[2][3]=0;yyb[2][4]=0;yyb[2][5]=0;yyb[2][6]=1;
yyb[3][1]=0;yyb[3][2]=2;yyb[3][3]=0;yyb[3][4]=1;yyb[3][5]=0;yyb[3][6]=2;
yyb[4][1]=0;yyb[4][2]=1;yyb[4][3]=1;yyb[4][4]=1;yyb[4][5]=0;yyb[4][6]=1;
yyb[5][1]=0;yyb[5][2]=0;yyb[5][3]=0;yyb[5][4]=0;yyb[5][5]=0;yyb[5][6]=0;
yyb[6][1]=0;yyb[6][2]=0;yyb[6][3]=0;yyb[6][4]=0;yyb[6][5]=1;yyb[6][6]=1;
yyb^=n-1;
ll ans=0;
for(register int t=1;t<=6;++t)
ans=(ans+(vec[t]*yyb[t][5])%mod)%mod;
printf("%lld\n",ans);
return 0;
}
斐波那契數列 題解
原題出自ural 1133。題目大意 擴充套件斐波那契數列在整數集上的定義,即不是從f0 0,f1 1 這樣子開始的,下標可以是任意整數。給定這樣乙個序列中的兩個下標,i,j,以及他們在序列中對應的值fi fj 然後要求fn n是輸入的乙個數字 思路1 由於題目裡說到資料範圍在 2 109 fk 2...
矩陣 斐波那契數列
利用矩陣來求解斐波那契數列的有關問題是acm題中乙個比較常見的題型。例 nyoj 148 斐波那契數列2 有關斐波那契樹列的規律詳見這裡。1 對於n 1,都有f n 與f n 1 互質。2 f n f i f n i 1 f i 1 f n i 現在說說怎麼利用矩陣來求解斐波那契數列。我們可以先儲存...
斐波那契數列 矩陣乘法
f 1 1 f 2 1 f n f n 1 f n 2 n 2 且 n 為整數 題目描述 請你求出 f n mod 1000000007 的值。輸入輸出格式 輸入格式 第 1 行 乙個整數 n 輸出格式 第 1 行 f n mod 1000000007 的值 輸入輸出樣例 輸入樣例 1 5輸出樣例 ...