1樓:Exception
一律py38招呼:
[(lambda x:len((fib := lambda n:
1 if n < 3 else fib(n-1) + fib(n-2))(x))(n) for n in range(101)]# 零到一百,夠了嗎?不行再改。
2樓:陳炳好
# python3 作者知乎_陳炳好時間複雜度 nwhile1:
a,b,
x=0,
1,int(
input
('第幾位:'
))while
x>0:
a,b,
x=b,
a+b,
x-1print(a
,len
(str(a
)),'位數'
)第100項: 354224848179261915075 ,21 位數
第1000000項: 19532821287077...太長省略...838242546875 ,208988 位數,
用時30秒,急需優化。
# python3 作者知乎_陳炳好時間複雜度 nwhile1:
a,b,
x,u,
v,w=
0,1,
int(
input
('第幾位:'
)),10**9
,10**3
,0while
x>1:
a,b,
x=b,
a+b,
x-1if
a>u:
a,b,
w=a//
v,b//
v,w+
3print
(len
(str(b
))+w,
'位數'
)第1000000項,208988 位數,用時0.2秒。速度還行。
# python3 作者知乎_陳炳好時間複雜度 n# 如果使用快速冪,時間複雜度可降至log(n,2)# 該演算法計算使用浮點數,如果n過大則資料溢位while1:
x=int(
input
('第幾位:'))n
=int
(((0.5
+1.25
**0.5)**
x-(0.5
-1.25
**0.5)**
x)/(
5**0.5))
print(n
)第1000項:209位數
# python3 作者知乎_陳炳好時間複雜度定值cimport
math
while1:
x=int(
input
('第幾位:'
))if
x<5:
n=len(
str(
int(((
0.5+
1.25
**0.5)**
x-(0.5
-1.25
**0.5)**
x)/(
5**0.5)
+0.1
)))else:n
=int(x
*math
.log
(0.5
+1.25
**0.5,10
)-math
.log(5
**0.5,10
)+1)
print(n
,'位數'
)第1000000項,208988 位數,用時0.00002秒。完事。
# python3 作者知乎_陳炳好時間複雜度定值cimport
math
while1:
try:x=
int(
input
(' 第幾項:'
))except
:pass
else:n
=x*math
.log
(0.5
+1.25
**0.5,10
)-0.5*
math
.log(5
,10)if
x<50:
(' 第',x
,'項為'
,len
(str
(int(10
**n+0.3
))),
'位數'
,'='
,int(10
**n+0.3
))else:m
=str
(int(n
//1-9
(' 第',x
,'項為'
,int(n
+1),'位數'
,'≈'
,int(10
**(n-
n//1)
*10**9
),'x'
,'10'+m
.replace
("0",""
).replace
("1",""
).replace
("2",""
).replace
("3",""
).replace
("4",""
).replace
("5",""
).replace
("6",""
).replace
("7",""
).replace
("8",""
).replace
("9",""
))第 1000000 項為208988 位數≈1953282128 x 10
3樓:
令斐波那契數列的第n項為 2" eeimg="1"/>,則有我們可以用矩陣快速冪在 的時間複雜度內計算出矩陣的冪。當然這樣做是直接求出第n項的具體的值,這個值的增長速度是指數級的。而我們只想知道它有多少位,所以我們需要稍作修改,定義一種十進位制位的浮點小數,在乙個結構體中用64位浮點數儲存乙個不超過10的值作為尾數,另用乙個64位整數作為階碼。
最後階碼的值+1即為十進位制的位數。
用c++隨便寫了一下。
#include
using
namespace
std;
template
T>inline Tquickpow(T x,long longy); struct pdlelseif( y elseif( res. x>=10) res.x/= 10.0 ,res.y ++;return res; }pdl operator*( const pdl& rhs) const;if (res.x >=10) res.x/= 10.0 ,res.y ++;return res;}}; struct mat, ele[0][ 1]=; ele[1][ 0]=, ele[1][ 1]=; }mat operator*( const mat& rhs) const };template T>inline Tunitary ()template <>inline matunitary <>(); res. ele[1][ 0]=, res. ele[1][ 1]=; return res; }template T>inline Tquickpow(T x,long longy) intmain (int argc ,char **argv )else return0; }第1000000項應該有208988位十進位制位。 4樓: 程式設計序啊,跟前沒有裝vs的電腦,就大致說一下思路,以C sharp為例 先寫乙個巢狀函式。用if和return語句把最終的計算結果用tostring函式轉化為字串再呼叫字串函式length 完美,多簡單 不過不保證不會崩 5樓:醬紫君 所謂位數就是常用對數下取整嘛, 所以: 然後隨便化簡一下: 不過說實話100萬也不大, Mathematica 2ms 就能給你算一遍再給你數一遍... 注意到已經有兩個答主指出了當 整除 時,一定成立。其中有一位答主的證明用了通項公式。這裡給出另乙個更強的結論與其證明 定理 其中 表示最大公約數。定理的證明 時結論顯然成立,因此只需證明 的情形即可。事實上,由第二數學歸納法對 進行歸納,容易證明,當 m eeimg 1 時,另外根據遞推式及Eucl... Marcovaldo 1 使用matlab中的fibonacci n 函式 在matlab中fibonacci n 返回第n個斐波那契數 clcclear all 第23項的斐波那契數 the 23 fibonacci 23 X sprintf 第23項的斐波那契數 d the 23 disp X ... c 語言 private static IEnumerable Fibonacci Fibonacci Take 20 很簡單 z root 我是來抖機靈的 高富帥狂公升硬體矮窮矬死改演算法 long fib inta returnf Leo 試下這個 include template class ...斐波那契數列中,第5n項(n N )都能被5整除嗎?
用MATLAB怎麼編寫斐波那契數列?
為什麼下面程式遞迴計算斐波那契數列java比c 要快?