Python實(shí)現(xiàn)將一個(gè)正整數(shù)分解質(zhì)因數(shù)的方法分析
本文實(shí)例講述了Python實(shí)現(xiàn)將一個(gè)正整數(shù)分解質(zhì)因數(shù)的方法。分享給大家供大家參考,具體如下:
遇到一個(gè)python編程聯(lián)系題目:將一個(gè)正整數(shù)分解質(zhì)因數(shù)。例如:輸入90,打印出90=2*3*3*5。
版本一:
開始,沒動(dòng)腦子就開始寫了,結(jié)果如下代碼
#! /usr/bin/python # 014.py import math number = int(raw_input("Enter a number: ")) while number != 1: for i in range(1, number + 1): if (number % i) == 0 and i != 1: number = number / i if number == 1: print " %d" %i else: print " %d*" %i, break
結(jié)果,輸入9876543210這個(gè)十位數(shù)的時(shí)候,報(bào)錯(cuò):
Traceback (most recent call last):
File "./014.py", line 8, in <module>
for i in range(1, number + 1):
OverflowError: range() result has too many items
版本二:
版本一報(bào)錯(cuò)是因?yàn)閞ange有了太多的項(xiàng),于是想著減少range出的list的項(xiàng)。由于,在判斷一個(gè)數(shù)n是否是質(zhì)數(shù)的時(shí)候,只需從2到n的平方根就行了,所以有了版本二,代碼如下:
#! /usr/bin/python # 014_1.py import math number = int(raw_input("Enter a number: ")) list = [] def getChildren(num): print '*'*30 isZhishu = True for i in range(2, int(math.sqrt(1 + num)) + 1): #多加個(gè)1 if num % i == 0 and i != num : list.append(i) isZhishu = False getChildren(num / i) break if isZhishu: list.append(num) getChildren(number) print list
這樣,數(shù)字可以增大很多而不至于報(bào)錯(cuò)。但是 ,也是很有限度的,當(dāng)輸入大數(shù)如 123124324324134334 時(shí),會(huì)導(dǎo)致內(nèi)存不足,殺死進(jìn)程
Traceback (most recent call last):
File "./014_1.py", line 20, in <module >
getChildren(number)
File "./014_1.py", line 11, in getChildren
for i in range(2, int(math.sqrt(1 + num)) + 1):
MemoryError
為了追求能對(duì)更大的數(shù)進(jìn)行操作,猜想原因可能是遞歸調(diào)用時(shí)每次都需要建立一個(gè)很大的由range()建立的list,于是想避免range的使用,于是有了版本三:
版本三:
代碼
#! /usr/bin/python # 014_1.py import math number = int(raw_input("Enter a number: ")) list = [] def getChildren(num): print '*'*30 isZhishu = True i = 2 square = int(math.sqrt(num)) + 1 while i <= square: if num % i == 0: list.append(i) isZhishu = False getChildren(num / i) i += 1 break i += 1 if isZhishu: list.append(num) getChildren(number) print list
同樣對(duì)123124324324134334 進(jìn)行操作,速度很快,得到如下結(jié)果
Enter a number: 123124324324134334
******************************
******************************
******************************
******************************
******************************
[2, 293, 313, 362107, 1853809L]
PS:這里再為大家推薦幾款計(jì)算工具供大家進(jìn)一步參考借鑒:
在線分解質(zhì)因數(shù)計(jì)算器工具:
http://tools.jb51.net/jisuanqi/factor_calc
在線一元函數(shù)(方程)求解計(jì)算工具:
http://tools.jb51.net/jisuanqi/equ_jisuanqi
科學(xué)計(jì)算器在線使用_高級(jí)計(jì)算器在線計(jì)算:
http://tools.jb51.net/jisuanqi/jsqkexue
在線計(jì)算器_標(biāo)準(zhǔn)計(jì)算器:
http://tools.jb51.net/jisuanqi/jsq
更多關(guān)于Python相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Python數(shù)學(xué)運(yùn)算技巧總結(jié)》、《Python數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Python函數(shù)使用技巧總結(jié)》、《Python字符串操作技巧匯總》、《Python入門與進(jìn)階經(jīng)典教程》及《Python文件與目錄操作技巧匯總》
希望本文所述對(duì)大家Python程序設(shè)計(jì)有所幫助。
- Python實(shí)現(xiàn)的質(zhì)因式分解算法示例
- Python實(shí)現(xiàn)正整數(shù)分解質(zhì)因數(shù)操作示例
- Python實(shí)現(xiàn)簡(jiǎn)單求解給定整數(shù)的質(zhì)因數(shù)算法示例
- 使用Python判斷質(zhì)數(shù)(素?cái)?shù))的簡(jiǎn)單方法講解
- python實(shí)現(xiàn)挑選出來100以內(nèi)的質(zhì)數(shù)
- python求質(zhì)數(shù)的3種方法
- Python 判斷是否為質(zhì)數(shù)或素?cái)?shù)的實(shí)例
- Python編程求質(zhì)數(shù)實(shí)例代碼
- python輸出100以內(nèi)的質(zhì)數(shù)與合數(shù)實(shí)例代碼
- Python實(shí)現(xiàn)的對(duì)一個(gè)數(shù)進(jìn)行因式分解操作示例
相關(guān)文章
Python中的enumerate函數(shù)使用方法詳解
enumerate()是python的內(nèi)置函數(shù),適用于python2.x和python3.x,這篇文章主要給大家介紹了關(guān)于Python中的enumerate函數(shù)使用方法的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-06-06Python通過TensorFLow進(jìn)行線性模型訓(xùn)練原理與實(shí)現(xiàn)方法詳解
這篇文章主要介紹了Python通過TensorFLow進(jìn)行線性模型訓(xùn)練原理與實(shí)現(xiàn)方法,結(jié)合實(shí)例形式詳細(xì)分析了Python通過TensorFLow進(jìn)行線性模型訓(xùn)練相關(guān)概念、算法設(shè)計(jì)與訓(xùn)練操作技巧,需要的朋友可以參考下2020-01-01Python編寫車票訂購系統(tǒng)?Python實(shí)現(xiàn)快遞收費(fèi)系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了Python編寫車票訂購系統(tǒng),Python實(shí)現(xiàn)快遞收費(fèi)系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-08-08用python實(shí)現(xiàn)的去除win下文本文件頭部BOM的代碼
windows環(huán)境下新建或編輯文本文件,保存時(shí)會(huì)在頭部加上BOM。使用ftp上傳到linux下,在執(zhí)行時(shí)第一行即報(bào)錯(cuò)。以下方法可以去除BOM頭,有需要的朋友可以參考下2013-02-02Python字符串格式化format()方法運(yùn)用實(shí)例
這篇文章主要給大家介紹了關(guān)于Python字符串格式化format()方法運(yùn)用實(shí)例的相關(guān)資料,字符串格式化是Python編程中十分常用的部分,它可以幫助我們將更具可讀性的數(shù)據(jù)輸出到控制臺(tái)或?qū)懭胛募?需要的朋友可以參考下2023-08-08python實(shí)現(xiàn)的按要求生成手機(jī)號(hào)功能示例
這篇文章主要介紹了python實(shí)現(xiàn)的按要求生成手機(jī)號(hào)功能,涉及Python流程控制、隨機(jī)數(shù)操作及數(shù)學(xué)運(yùn)算相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下2019-10-10Python用SSH連接到網(wǎng)絡(luò)設(shè)備
這篇文章主要介紹了Python用SSH連接到網(wǎng)絡(luò)設(shè)備,幫助大家更好的理解和使用python,感興趣的朋友可以了解下2021-02-02