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 27 Python
详解Python 模拟实现生产者消费者模式的实例
Aug 10 Python
分析Python读取文件时的路径问题
Feb 11 Python
Python中的二维数组实例(list与numpy.array)
Apr 13 Python
Python实现计算圆周率π的值到任意位的方法示例
May 08 Python
python调用Matplotlib绘制分布点并且添加标签
May 31 Python
python实现连续图文识别
Dec 18 Python
详解python执行shell脚本创建用户及相关操作
Apr 11 Python
python实践项目之监控当前联网状态详情
May 23 Python
python爬虫开发之Beautiful Soup模块从安装到详细使用方法与实例
Mar 09 Python
利用django model save方法对未更改的字段依然进行了保存
Mar 28 Python
浅析Python OpenCV三种滤镜效果
Apr 11 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中使用sockets:从新闻组中获取文章
2006/10/09 PHP
iis下php mail函数的sendmail配置方法(官方推荐)
2012/04/25 PHP
php实现可用于mysql,mssql,pg数据库操作类
2014/12/13 PHP
php提取身份证号码中的生日日期以及验证是否为成年人的函数
2015/09/29 PHP
详解php魔术方法(Magic methods)的使用方法
2016/02/14 PHP
thinkPHP5.1框架中Request类四种调用方式示例
2019/08/03 PHP
asp.net下利用js实现返回上一页的实现方法小集
2009/11/24 Javascript
js修改地址栏URL参数解决url参数问题
2012/12/15 Javascript
JavaScript声明变量时为什么要加var关键字
2014/09/29 Javascript
原生Js实现简易烟花爆炸效果的方法
2015/03/20 Javascript
javascript日期计算实例分析
2015/06/29 Javascript
js读取并解析JSON类型数据的方法
2015/11/14 Javascript
jQuery div拖拽用法实例
2016/01/14 Javascript
jQuery Form 表单提交插件之formSerialize,fieldSerialize,fieldValue,resetForm,clearForm,clearFields的应用
2016/01/23 Javascript
JavaScript中附件预览功能实现详解(推荐)
2017/08/15 Javascript
Cropper.js 实现裁剪图片并上传(PC端)
2017/08/20 Javascript
angular4 如何在全局设置路由跳转动画的方法
2017/08/30 Javascript
解决vue的 v-for 循环中图片加载路径问题
2018/09/03 Javascript
Vue页面跳转动画效果的实现方法
2018/09/23 Javascript
详解如何在vue项目中使用lodop打印插件
2018/09/27 Javascript
详解koa2学习中使用 async 、await、promise解决异步的问题
2018/11/13 Javascript
js实现弹幕飞机效果
2020/08/27 Javascript
解决vue项目 build之后资源文件找不到的问题
2020/09/12 Javascript
python求列表交集的方法汇总
2014/11/10 Python
python实现杨氏矩阵查找
2019/03/02 Python
Python批量删除只保留最近几天table的代码实例
2019/04/01 Python
如何基于Python实现自动扫雷
2020/01/06 Python
python实现替换word中的关键文字(使用通配符)
2020/02/13 Python
Python3监控疫情的完整代码
2020/02/20 Python
如何验证python安装成功
2020/07/06 Python
Python matplotlib图例放在外侧保存时显示不完整问题解决
2020/07/28 Python
Python做图像处理及视频音频文件分离和合成功能
2020/11/24 Python
去加拿大的旅行和假期:Canadian Affair
2016/10/25 全球购物
企业安全生产责任书范本
2014/07/28 职场文书
国庆横幅标语
2014/10/08 职场文书
电子表的操作介绍说明书
2019/10/28 职场文书