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中何种情况下需要使用断言
Apr 01 Python
django之常用命令详解
Jun 30 Python
python 性能提升的几种方法
Jul 15 Python
Python探索之实现一个简单的HTTP服务器
Oct 28 Python
Python编程django实现同一个ip十分钟内只能注册一次
Nov 03 Python
对python3 一组数值的归一化处理方法详解
Jul 11 Python
python安装numpy和pandas的方法步骤
May 27 Python
python3射线法判断点是否在多边形内
Jun 28 Python
Django组件content-type使用方法详解
Jul 19 Python
基于django 的orm中非主键自增的实现方式
May 18 Python
Tensorflow--取tensorf指定列的操作方式
Jun 30 Python
python操作redis数据库的三种方法
Sep 10 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读取目录所有文件信息dir示例
2014/03/18 PHP
分享下php5类中三种数据类型的区别
2015/01/26 PHP
php中preg_match的isU代表什么意思
2015/10/01 PHP
php及codeigniter使用session-cookie的方法(详解)
2017/04/06 PHP
Laravel中如何轻松容易的输出完整的SQL语句
2020/07/26 PHP
浅析js中的浮点型运算问题
2014/01/06 Javascript
js实现从中间开始往上下展开网页窗口的方法
2015/03/02 Javascript
聊一聊Vue.js过渡效果
2016/09/07 Javascript
JS实现的样式切换功能tableCSS实例
2016/12/30 Javascript
web打印小结
2017/01/11 Javascript
详解React中的组件通信问题
2017/07/31 Javascript
vue登录路由验证的实现
2017/12/13 Javascript
vue+Element-ui实现分页效果实例代码详解
2018/12/10 Javascript
JavaScript实现美化滑块效果
2019/05/17 Javascript
Nodejs实现图片上传、压缩预览、定时删除功能
2019/10/25 NodeJs
python使用正则搜索字符串或文件中的浮点数代码实例
2014/07/11 Python
python3实现短网址和数字相互转换的方法
2015/04/28 Python
Python中用max()方法求最大值的介绍
2015/05/15 Python
详解Python中find()方法的使用
2015/05/18 Python
使用Python保存网页上的图片或者保存页面为截图
2016/03/05 Python
python验证码识别的实例详解
2016/09/09 Python
Python3.6简单操作Mysql数据库
2017/09/12 Python
python机器学习之神经网络(一)
2017/12/20 Python
Django1.9 加载通过ImageField上传的图片方法
2018/05/25 Python
python实现浪漫的烟花秀
2019/01/30 Python
Django 表单模型选择框如何使用分组
2019/05/16 Python
使用OpenCV实现仿射变换—平移功能
2019/08/29 Python
浅析python内置模块collections
2019/11/15 Python
利用HTML5中的Canvas绘制一张笑脸的教程
2015/05/07 HTML / CSS
Bose英国官方网站:美国知名音响品牌
2020/01/26 全球购物
机械设计制造专业个人求职信
2013/09/25 职场文书
中餐厅主管的职责范文
2014/02/04 职场文书
乡镇党的群众路线教育实践活动剖析材料
2014/10/09 职场文书
2015教师年度考核评语
2015/03/25 职场文书
position:sticky 粘性定位的几种巧妙应用详解
2021/04/24 HTML / CSS
Redis Cluster集群动态扩容的实现
2021/07/15 Redis