Python实现将一个正整数分解质因数的方法分析


Posted in Python onDecember 14, 2017

本文实例讲述了Python实现将一个正整数分解质因数的方法。分享给大家供大家参考,具体如下:

遇到一个python编程联系题目:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。

版本一:

开始,没动脑子就开始写了,结果如下代码

#! /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

结果,输入9876543210这个十位数的时候,报错:

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的项。由于,在判断一个数n是否是质数的时候,只需从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

这样,数字可以增大很多而不至于报错。但是 ,也是很有限度的,当输入大数如 123124324324134334 时,会导致内存不足,杀死进程

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

为了追求能对更大的数进行操作,猜想原因可能是递归调用时每次都需要建立一个很大的由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 进行操作,速度很快,得到如下结果

 Enter a number: 123124324324134334
******************************
******************************
******************************
******************************
******************************
[2, 293, 313, 362107, 1853809L]

PS:这里再为大家推荐几款计算工具供大家进一步参考借鉴:

在线分解质因数计算器工具:
http://tools.3water.com/jisuanqi/factor_calc

在线一元函数(方程)求解计算工具:
http://tools.3water.com/jisuanqi/equ_jisuanqi

科学计算器在线使用_高级计算器在线计算:
http://tools.3water.com/jisuanqi/jsqkexue

在线计算器_标准计算器:
http://tools.3water.com/jisuanqi/jsq

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
Python实现对PPT文件进行截图操作的方法
Apr 28 Python
用Python实现一个简单的能够上传下载的HTTP服务器
May 05 Python
详解Python中用于计算指数的exp()方法
May 14 Python
python构建自定义回调函数详解
Jun 20 Python
python dataframe NaN处理方式
Dec 26 Python
在 Linux/Mac 下为Python函数添加超时时间的方法
Feb 20 Python
django实现模板中的字符串文字和自动转义
Mar 31 Python
Django Xadmin多对多字段过滤实例
Apr 07 Python
python实现手势识别的示例(入门)
Apr 15 Python
java字符串格式化输出实例讲解
Jan 06 Python
通用的Django注册功能模块实现方法
Feb 05 Python
python标准库ElementTree处理xml
May 20 Python
Python随机生成均匀分布在三角形内或者任意多边形内的点
Dec 14 #Python
rabbitmq(中间消息代理)在python中的使用详解
Dec 14 #Python
用python的requests第三方模块抓取王者荣耀所有英雄的皮肤实例
Dec 14 #Python
用Python删除本地目录下某一时间点之前创建的所有文件的实例
Dec 14 #Python
python编程通过蒙特卡洛法计算定积分详解
Dec 13 #Python
Python编程产生非均匀随机数的几种方法代码分享
Dec 13 #Python
windows下Virtualenvwrapper安装教程
Dec 13 #Python
You might like
PHP APC缓存配置、使用详解
2014/03/06 PHP
合格的PHP程序员必备技能
2015/11/13 PHP
项目中应用Redis+Php的场景
2016/05/22 PHP
yii2中LinkPager增加总页数和总记录数的实例
2017/08/28 PHP
javascript fullscreen全屏实现代码
2009/04/09 Javascript
保证JavaScript和Asp、Php等后端程序间传值编码统一
2009/04/17 Javascript
Javascript在IE或Firefox下获取鼠标位置的代码
2009/12/18 Javascript
javascript eval和JSON之间的联系
2009/12/31 Javascript
js下判断 iframe 是否加载完成的完美方法
2010/10/26 Javascript
基于JQuery的列表拖动排序实现代码
2013/10/01 Javascript
jquery提交form表单时禁止重复提交的方法
2014/02/13 Javascript
jQuery插件formValidator自定义函数扩展功能实例详解
2015/11/25 Javascript
浅谈json取值(对象和数组)
2016/06/24 Javascript
D3.js实现饼状图的方法详解
2016/09/21 Javascript
selenium 与 chrome 进行qq登录并发邮件操作实例详解
2017/04/06 Javascript
js调用刷新界面的几种方式
2017/05/03 Javascript
微信小程序 实现点击添加移除class
2017/06/12 Javascript
JavaScript实现开关等效果
2017/09/08 Javascript
ES6中Array.copyWithin()函数的用法实例详解
2017/09/16 Javascript
原生JS实现的雪花飘落动画效果
2018/05/03 Javascript
JavaScript实现多张图片放大镜效果示例【不限定图片尺寸,rem单位】
2019/05/14 Javascript
jQuery实现B2B网站后台管理系统侧导航
2020/07/08 jQuery
python实现的二叉树算法和kmp算法实例
2014/04/25 Python
Python httplib模块使用实例
2015/04/11 Python
python实现输出一个序列的所有子序列示例
2019/11/18 Python
Backcountry旗下的户外商品闪购网站:steep&cheap
2016/09/22 全球购物
行政助理的职责
2013/11/14 职场文书
文明风采获奖感言
2014/02/18 职场文书
同志主要表现材料
2014/08/21 职场文书
领导干部四风问题自我剖析材料
2014/09/25 职场文书
2014年出纳工作总结与计划
2014/12/09 职场文书
离职证明格式样本
2015/06/12 职场文书
个人向公司借款协议书
2016/03/19 职场文书
火锅店的开业营销方案范本!
2019/07/05 职场文书
SpringBoot2零基础到精通之数据与页面响应
2022/03/22 Java/Android
一起来看看Vue的核心原理剖析
2022/03/24 Vue.js