Python 實現 分治法提高大數階乘計算速度

2021-08-28 16:44:01 字數 943 閱讀 8093

(一),用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,此時子陣列就不用進行排序了,再往上回溯,依據每個子陣列中的元素大小對子陣列進行合併,依次進行下去,最後返回...