(一),用python簡單實現大數階乘的全部結果位數:
n=10000,耗時: 0.062秒
n=100000, 耗時: 14.1秒
#-*-coding:utf8;-*-
# 大數階乘計算
# idealguy,2018
import time
def factoria(n):
a=1for i in range(2,n+1):
a*=i
return a
t=time.clock()
n=100000
a=factoria(n)
t=time.clock()-t
# print (a)
print("耗時: %10.5f秒" % (t))
(二),採用分治法提高大數的階乘計算速度
n=10000,耗時: 0.026秒
n=100000, 耗時: 1.40秒
#-*-coding:utf8;-*-
# 分治法加快大數階乘計算的速度
#
import time
def factoria(n):
n2=n
a=list(range(1,n+1))
while n2>1:
n1=n2%2; n2=n2//2+n1
for i in range(n2-n1):
a[i]*=a[n2+i]
a=a[0:n2]
return a[0]
t=time.clock()
a=factoria(100000)
t=time.clock()-t
print (a%10000000000)
print("耗時: %10.5f秒" % (t))
分治法實現大數相乘 C 實現
分治法的思路一般的演算法教科書上都有,大數相乘也經常用來作為練習分治思想的很好的例子。具體如下 雖然上面的原理是對應2進製的,但是對於10進製也同樣可行。用c 實現,盡可能的利用c 的特性。本例中,只要拆分的數字小於9位數,就可以直接相乘計算,保證不會溢位。在程式設計中,還需要用的加法和減法,也要通...
分治法 大數相乘(演算法001)
兩個長為n bit的數x和y相乘。我們可以將數分為長為n 2 bit的前後兩部分,分別相乘。x y 2n 2xl xr 2n 2yl yr 2nxlyl 2n 2 xlyr xryl xryr 2nxlyl 2n 2 xl xr yl yr xlyl xryr xryr 公式如上,xl,yl,xr,...
分治法實現歸併排序演算法(python實現)
給定任意幾組資料,利用分治法的思想,將資料進行排序並將排好的資料進行輸出。利用分治法,將乙個陣列元素大於 2 的陣列分成兩個子陣列,然後對每乙個子陣列遞迴呼叫,直到最下的子陣列的元素個數為 1,此時子陣列就不用進行排序了,再往上回溯,依據每個子陣列中的元素大小對子陣列進行合併,依次進行下去,最後返回...