由fibonacci數列遞推式,設數列中連續兩項a=f(i+1),b=f(i),由a,b得到遞推到下兩項(a』,b』)的式子為a』=a+b,b』=a,如果把(a,b)看作二維向量,則遞推過程等價於乘上乙個二階向量
1 1
1 0
該矩陣同時是
f(2) f(1)
f(1) f(0)
由分塊矩陣的乘積可以得到fibonacci數列的矩陣表示
(來自poj)
這樣一來,求fibonacci數列第n項轉化為求n次冪的問題
利用位移運算子求底數的n次冪,將時間複雜度由普通的o(n)減小到o(log2(n))
思路:按照指數的二進位制表示迴圈求冪;
int quick_pow(int a, int b)
return ans;
}
description
定義fib數列:1,1,2,3,5,8,13,…
求第n項除以2010的餘數
input format
輸入僅一行,為乙個整數n
output format
輸出僅一行,為第n項除以2010的餘數
sample input
3 sample output
2 limits:
對於70%的資料 n≤1,000,000
對於100%的資料 n≤210,000,000,000
#include
#include
using namespace std;
class matrix2
matrix2(const matrix2& obj)
matrix2& operator%= (int a);
int fetch(int a, int b);
};matrix2 operator* (const matrix2& obj1, const matrix2& obj2)
return tmp;
}matrix2& matrix2::operator%= (int a)
int matrix2::fetch(int a, int b)
int fib_mod(long
long power, int mod)
base = base * base;
base %= mod;
power >>= 1;
}return (ans.fetch(0,1));
}int main()
面試過程中
面試過程中,面試官會向應聘者發問,而應聘者的回答將成為面試官考慮是否接受他的重要依據。對應聘者而言,了解這些問題背後的 貓膩 至關重要。本文對面試中經常出現的一些典型問題進行了整理,並給出相應的回答思路和參 讀者無需過分關注分析的細節,關鍵是要從這些分析中 悟 出面試的規律及回答問題的思維方式,達到...
儲存過程中呼叫儲存過程
use northwind go 儲存過程1 功能 通過員工firstname inputempfirstname 獲得 員工id outid if exists select name from sysobjects where name p getempleeidbyname and type ...
儲存過程中事務操作
資料庫中事務主要應用在多條語句的更新操作 插入 修改 刪除 可以保證資料的完整性與正確性。使用原則為盡可能少的影響資料,以免產生死鎖或者占用資源。在儲存過程中如果中間操作有非嚴重的錯誤資訊執行不會中斷,會繼續執行並返回相應結果。但是程式呼叫的話如果不是用 try catch形式則會報錯,出現黃頁。需...