Python實現(xiàn)將一個正整數(shù)分解質(zhì)因數(shù)的方法分析
本文實例講述了Python實現(xiàn)將一個正整數(shù)分解質(zhì)因數(shù)的方法。分享給大家供大家參考,具體如下:
遇到一個python編程聯(lián)系題目:將一個正整數(shù)分解質(zhì)因數(shù)。例如:輸入90,打印出90=2*3*3*5。
版本一:
開始,沒動腦子就開始寫了,結(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這個十位數(shù)的時候,報錯:
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
版本二:
版本一報錯是因為range有了太多的項,于是想著減少range出的list的項。由于,在判斷一個數(shù)n是否是質(zhì)數(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): #多加個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ù)字可以增大很多而不至于報錯。但是 ,也是很有限度的,當輸入大數(shù)如 123124324324134334 時,會導致內(nèi)存不足,殺死進程
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
為了追求能對更大的數(shù)進行操作,猜想原因可能是遞歸調(diào)用時每次都需要建立一個很大的由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
同樣對123124324324134334 進行操作,速度很快,得到如下結(jié)果
Enter a number: 123124324324134334
******************************
******************************
******************************
******************************
******************************
[2, 293, 313, 362107, 1853809L]
PS:這里再為大家推薦幾款計算工具供大家進一步參考借鑒:
在線分解質(zhì)因數(shù)計算器工具:
http://tools.jb51.net/jisuanqi/factor_calc
在線一元函數(shù)(方程)求解計算工具:
http://tools.jb51.net/jisuanqi/equ_jisuanqi
科學計算器在線使用_高級計算器在線計算:
http://tools.jb51.net/jisuanqi/jsqkexue
在線計算器_標準計算器:
http://tools.jb51.net/jisuanqi/jsq
更多關于Python相關內(nèi)容感興趣的讀者可查看本站專題:《Python數(shù)學運算技巧總結(jié)》、《Python數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Python函數(shù)使用技巧總結(jié)》、《Python字符串操作技巧匯總》、《Python入門與進階經(jīng)典教程》及《Python文件與目錄操作技巧匯總》
希望本文所述對大家Python程序設計有所幫助。
- Python實現(xiàn)的質(zhì)因式分解算法示例
- Python實現(xiàn)正整數(shù)分解質(zhì)因數(shù)操作示例
- Python實現(xiàn)簡單求解給定整數(shù)的質(zhì)因數(shù)算法示例
- 使用Python判斷質(zhì)數(shù)(素數(shù))的簡單方法講解
- python實現(xiàn)挑選出來100以內(nèi)的質(zhì)數(shù)
- python求質(zhì)數(shù)的3種方法
- Python 判斷是否為質(zhì)數(shù)或素數(shù)的實例
- Python編程求質(zhì)數(shù)實例代碼
- python輸出100以內(nèi)的質(zhì)數(shù)與合數(shù)實例代碼
- Python實現(xiàn)的對一個數(shù)進行因式分解操作示例
相關文章
Python中的enumerate函數(shù)使用方法詳解
enumerate()是python的內(nèi)置函數(shù),適用于python2.x和python3.x,這篇文章主要給大家介紹了關于Python中的enumerate函數(shù)使用方法的相關資料,文中通過代碼介紹的非常詳細,需要的朋友可以參考下2024-06-06Python通過TensorFLow進行線性模型訓練原理與實現(xiàn)方法詳解
這篇文章主要介紹了Python通過TensorFLow進行線性模型訓練原理與實現(xiàn)方法,結(jié)合實例形式詳細分析了Python通過TensorFLow進行線性模型訓練相關概念、算法設計與訓練操作技巧,需要的朋友可以參考下2020-01-01Python編寫車票訂購系統(tǒng)?Python實現(xiàn)快遞收費系統(tǒng)
這篇文章主要為大家詳細介紹了Python編寫車票訂購系統(tǒng),Python實現(xiàn)快遞收費系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-08-08用python實現(xiàn)的去除win下文本文件頭部BOM的代碼
windows環(huán)境下新建或編輯文本文件,保存時會在頭部加上BOM。使用ftp上傳到linux下,在執(zhí)行時第一行即報錯。以下方法可以去除BOM頭,有需要的朋友可以參考下2013-02-02