hdu3117
求[0,1e8]的f(n)的前後4位。
輸入:
35輸出:3637
3839
4064
65
9227465通項公式 f[n]=(1/sqrt(5)) *14930352
24157817
39088169
63245986
1023...4155
1061...7723
1716...7565
減號後面的部分,底數小於1,當n增大時,非常小,可以忽略。
f(n),對10取對數,得
double
lg = -
0.5*
log10
(5.0
) + n *
log10
(gold);
直接再對10取冪貌似超時。
因為10對0.b次方等於10對a.b次方向右移a位,數字不變,所以可以
lg -= (
int)lg;
double
fn =
pow(
10,lg);
再使fn成為4位數。
f(1)=1,f(2)=2,f(n)=f(n-1)+f(n-2)(n>=3)
用矩陣表示為:
可用矩陣快速冪取模求解。
#include
#include
#include
#include
using
namespace
std;
const
intmaxn = 40;
const
double
gold = (1+
sqrt
(5.0
)) / 2;
long
long
f[maxn
] = ;
struct
martrix,}; };
martrix
multiply(
martrix
&a,martrix
&b,intn)
res.
a[i][j] %=
10000;
} }
return
res; }
void
prefix(
intn)
void
suffix(
intk)
k >>= 1;
q =
multiply
(q, q, 2);
}int
fn = res.a[
0][0] + res.a[
0][1];
printf
("%04d\n"
,fn %
10000);
}int
main()
else }
return0;
}
斐波那契數列計算 B
描述 斐波那契數列如下 f 0 0,f 1 1 f n f n 1 f n 2 編寫乙個計算斐波那契數列的函式,採用遞迴方式,輸出不超過n的所有斐波那契數列元素 呼叫上述函式,完成如下功能 使用者輸入乙個整數n,輸出所有不超過n的斐波那契數列元素 輸出數列的元素和及平均數,輸出按照順序,用英文逗號和...
python實現 斐波那契數列計算
斐波那契數列如下 f 0 0,f 1 1 f n f n 1 f n 2 編寫乙個計算斐波那契數列的函式,採用遞迴方式,輸出不超過n的所有斐波那契數列元素 呼叫上述函式,完成如下功能 使用者輸入乙個整數n,輸出所有不超過n的斐波那契數列元素 輸出數列的元素和及平均數,輸出按照順序,用英文逗號和空格分...
斐波那契數列 斐波那契數列python實現
斐波那契數列 fibonacci sequence 又稱 分割數列 因數學家列昂納多 斐波那契 leonardoda fibonacci 以兔子繁殖為例子而引入,故又稱為 兔子數列 指的是這樣乙個數列 1 1 2 3 5 8 13 21 34 在數學上,斐波納契數列以如下被以遞推的方法定義 f 1 ...