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-cv2實(shí)現(xiàn)Harr+Adaboost人臉識(shí)別的示例
這篇文章主要介紹了使用python-cv2實(shí)現(xiàn)Harr+Adaboost人臉識(shí)別的示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-10-10
Python開發(fā)文字版密室逃脫游戲的實(shí)例(含代碼)
密室逃脫游戲是一種頗受歡迎的解謎類游戲,玩家通常需要通過觀察、推理、合作等方式解決一系列難題,以逃脫困境,在這篇博文中,我們將使用Python開發(fā)一個(gè)文字版密室逃脫游戲,旨在通過簡(jiǎn)單的文本交互來呈現(xiàn)游戲的趣味性與挑戰(zhàn)性2025-04-04
詳談Python2.6和Python3.0中對(duì)除法操作的異同
下面小編就為大家?guī)硪黄斦凱ython2.6和Python3.0中對(duì)除法操作的異同。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-04-04
Python+OpenCV實(shí)現(xiàn)單個(gè)圓形孔和針檢測(cè)
這篇文章主要為大家詳細(xì)介紹了如何通過Python+OpenCV實(shí)現(xiàn)單個(gè)圓形孔和針檢測(cè)功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下2022-10-10
python opencv鼠標(biāo)畫矩形框之cv2.rectangle()函數(shù)
鼠標(biāo)操作屬于用戶接口設(shè)計(jì),以前一直使用Qt來做,但是如果只需要簡(jiǎn)單的鼠標(biāo),鍵盤操作,直接調(diào)用opencv庫(kù)的函數(shù)也未嘗不可,下面這篇文章主要給大家介紹了關(guān)于python opencv鼠標(biāo)畫矩形框cv2.rectangle()函數(shù)的相關(guān)資料,需要的朋友可以參考下2021-10-10

