斐波那契數列 計算前字尾

2021-08-03 22:38:33 字數 1677 閱讀 3560

hdu3117

求[0,1e8]的f(n)的前後4位。

輸入:

35

3637

3839

4064

65

輸出:

9227465

14930352

24157817

39088169

63245986

1023...4155

1061...7723

1716...7565

通項公式 f[n]=(1/sqrt(5)) *

減號後面的部分,底數小於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 ...