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在人工智能中的作用
Nov 14 Python
Django原生sql也能使用Paginator分页的示例代码
Nov 15 Python
python读取与写入csv格式文件的示例代码
Dec 16 Python
python基础教程项目五之虚拟茶话会
Apr 02 Python
Python利用splinter实现浏览器自动化操作方法
May 11 Python
Python基于递归算法求最小公倍数和最大公约数示例
Jul 27 Python
详解Python 正则表达式模块
Nov 05 Python
python中如何使用分步式进程计算详解
Mar 22 Python
Python Excel处理库openpyxl使用详解
May 09 Python
对python中的float除法和整除法的实例详解
Jul 20 Python
python多项式拟合之np.polyfit 和 np.polyld详解
Feb 18 Python
Python tkinter之ComboBox(下拉框)的使用简介
Feb 05 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命名空间(Namespace)简明教程
2014/06/11 PHP
php分页函数完整实例代码
2014/09/22 PHP
详解PHP原生DOM对象操作XML的方法
2016/10/17 PHP
jquery 实现的全选和反选
2009/04/15 Javascript
火狐textarea输入法的bug的触发及解决
2013/07/24 Javascript
jquery实现的鼠标下拉滚动置顶效果
2014/07/24 Javascript
JavaScript数据结构学习之数组、栈与队列
2017/05/02 Javascript
Bootstrap 模态框(Modal)带参数传值实例
2017/08/20 Javascript
vue 每次渲染完页面后div的滚动条保持在最底部的方法
2018/03/17 Javascript
mac上配置Android环境变量的方法
2018/07/08 Javascript
JavaScript原型对象、构造函数和实例对象功能与用法详解
2018/08/04 Javascript
微信小程序实现点击效果
2019/06/21 Javascript
ElementUI Tag组件实现多标签生成的方法示例
2019/07/08 Javascript
JS简单表单验证功能完整示例
2020/01/26 Javascript
微信小程序仿通讯录功能
2020/04/09 Javascript
python写xml文件的操作实例
2014/10/05 Python
Python数据分析matplotlib设置多个子图的间距方法
2018/08/03 Python
Python3中内置类型bytes和str用法及byte和string之间各种编码转换 问题
2018/09/27 Python
Python设计模式之建造者模式实例详解
2019/01/17 Python
python读取并定位excel数据坐标系详解
2019/06/26 Python
获取python运行输出的数据并解析存为dataFrame实例
2020/07/07 Python
基于Python实现下载网易音乐代码实例
2020/08/10 Python
世界上最好的帽子:Tilley
2016/11/27 全球购物
美国花园雕像和家居装饰网上商店:Design Toscano
2019/03/09 全球购物
StringBuilder和String的区别
2015/05/18 面试题
小学安全教育材料
2014/02/17 职场文书
小组口号大全
2014/06/09 职场文书
2014年安全工作总结范文
2014/11/13 职场文书
土建技术员岗位职责
2015/04/11 职场文书
2015年高二班主任工作总结
2015/05/25 职场文书
解约证明模板
2015/06/19 职场文书
钢铁是怎样炼成的读书笔记
2015/06/29 职场文书
小学教师教育随笔
2015/08/14 职场文书
2019暑期安全倡议书!
2019/06/27 职场文书
导游词之南京夫子庙
2019/12/09 职场文书
python控制台打印log输出重复的解决方法
2021/05/14 Python