编程心得

强大的sympy科学计算功能

例1:有n枚相同的棋子,甲、乙两人轮流取子,每次可取1至2枚,取完为止,求首尾两次都是甲取子的取法种数。
例2:求斐波那契数列的第n项。
说明:n从0开始为第一项
解题思路:
请参考《计数》(上海教育出版社,1983年10月第一版)p85-p87页的相关例题解答,在此直接使用通项公式,恕不解释。看看n取10000的用时吧,还是很给力的。

from sympy import sqrt, I
import time

n = int(input("Please enter an integer no less than 0:\n"))
if n < 0:
    print("Input error")
    exit()

t0 = time.time()
'''求例1取法种数'''
w1 = (-1 + I * sqrt(3))/2
w2 = (-1 - I * sqrt(3))/2
t1 = (1 + sqrt(5))/2
t2 = (1 - sqrt(5))/2
g = I * w1 ** (n + 1) / (2 * sqrt(3)) - I * w2 ** (n + 1) / (2 * sqrt(3)) + \
    t1 ** (n + 1) / (2 * sqrt(5)) - t2 ** (n + 1) / (2 * sqrt(5))
print(g.simplify())
print("It takes {} seconds".format(time.time() - t0))

t0 = time.time()
'''求斐波那契第n项'''
f = sqrt(5) * (((1 + sqrt(5)) / 2) ** (n + 1)) / 5 - sqrt(5) * (((1 - sqrt(5)) / 2) ** (n + 1)) / 5
print(f.simplify())
print("It takes {} seconds".format(time.time() - t0))
D:\Python\study\venv\Scripts\python.exe D:/Python/study/斐波那契.py
Please enter an integer no less than 0:
10000
27219186556782640750406226889785108437515679182338177502623256656965340693771428876095075015448015233268675071755569698915636686937802125887307775963081369698266221700985947874580164291617946737682061761940388730571099238961355743204105106912860300514761855673319637154849488740829369715572837885805143979706768350392933011250923715244000940889489400963032115709480085602298323554986792191663241130927451576234648597442070583283391543673224361911910413872840414532115144973285129363202395796244863627720531599516933041105624441972653615893557834291790167304794179005619859768402247453916619884896474571474276728257136284274474353235464686308540589499906891481986527462796026161196360225106902560972493456161031053169885636915783923545883855990665154979375654393854628748371332435407682101821660827424158796246463829303040357797842602799838111641038160625627142787069175521710615741591865507483277237716238893565179200659639982257275434875772876794316148797481963554200084475403827922681784643708323523433304340277204382639280596821523829951331574009635757982128631297571559379342794253800123705118646407138971348117746549234953512094861412296634756835111244846644245933114438978227209225586168930389644815473407421052053993301500097407475847812794096595709357637723398267910843310162300396704119121578593295157043711387829570335465407454549316083588738888794053307962528089520102482872211182282243611378992235908618903213511472290065366695690378907590191063984737167822967474858586142531863675406075988413269230645972268515875942469959658793692211900399642360506594798633064803579638487188430173700948343095809396232593453085315175819224192842431791715140980222215624631607580422777822823988425477446180548500957966096742965405064388633591443849464765014097260337092905794836085386581231471700361289691963294134682374870573459923805937867584816760253356348918885174621290928886706216319340895709693215649195515564737176404424577728670009998296904219193252825803314743198909331242933017463266273331237851199137664531811702089093129975722982576371707865985406232795705383474402315226553778176
It takes 121.23502254486084 seconds
54438373113565281338734260993750380135389184554695967026247715841208582865622349017083051547938960541173822675978026317384359584751116241439174702642959169925586334117906063048089793531476108466259072759367899150677960088306597966641965824937721800381441158841042480997984696487375337180028163763317781927941101369262750979509800713596718023814710669912644214775254478587674568963808002962265133111359929762726679441400101575800043510777465935805362502461707918059226414679005690752321895868142367849593880756423483754386342639635970733756260098962462668746112041739819404875062443709868654315626847186195620146126642232711815040367018825205314845875817193533529827837800351902529239517836689467661917953884712441028463935449484614450778762529520961887597272889220768537396475869543159172434537193611263743926337313005896167248051737986306368115003088396749587102619524631352447499505204198305187168321623283859794627245919771454628218399695789223798912199431775469705216131081096559950638297261253848242007897109054754028438149611930465061866170122983288964352733750792786069444761853525144421077928045979904561298129423809156055033032338919609162236698759922782923191896688017718575555520994653320128446502371153715141749290913104897203455577507196645425232862022019506091483585223882711016708433051169942115775151255510251655931888164048344129557038825477521111577395780115868397072602565614824956460538700280331311861485399805397031555727529693399586079850381581446276433858828529535803424850845426446471681531001533180479567436396815653326152509571127480411928196022148849148284389124178520174507305538928717857923509417743383331506898239354421988805429332440371194867215543576548565499134519271098919802665184564927827827212957649240235507595558205647569365394873317659000206373126570643509709482649710038733517477713403319028105575667931789470024118803094604034362953471997461392274791549730356412633074230824051999996101549784667340458326852960388301120765629245998136251652347093963049734046445106365304163630823669242257761468288461791843224793434406079917883360676846711185597501
It takes 38.27715182304382 seconds

Process finished with exit code 0

你可能感兴趣的:(python,学习,python)