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实现给qq邮箱发送邮件的方法
May 28 Python
Python实现多线程抓取网页功能实例详解
Jun 08 Python
Python 利用内置set函数对字符串和列表进行去重的方法
Jun 29 Python
wxPython的安装与使用教程
Aug 31 Python
Python面向对象类编写细节分析【类,方法,继承,超类,接口等】
Jan 05 Python
python基于itchat模块实现微信防撤回
Apr 29 Python
python3用PIL把图片转换为RGB图片的实例
Jul 04 Python
Win10系统下安装labelme及json文件批量转化方法
Jul 30 Python
Python实现微信机器人的方法
Sep 06 Python
python绘制BA无标度网络示例代码
Nov 21 Python
解决python web项目意外关闭,但占用端口的问题
Dec 17 Python
Python OpenCV形态学运算示例详解
Apr 07 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图片等比缩放类SimpleImage使用方法和使用实例分享
2014/04/10 PHP
详解PHP中foreach的用法和实例
2016/10/25 PHP
asp.net和php的区别点总结
2019/10/10 PHP
出现“不能执行已释放的Script代码”错误的原因及解决办法
2007/08/29 Javascript
javascript新手语法小结
2008/06/15 Javascript
30个最好的jQuery 灯箱插件分享
2011/04/25 Javascript
使用js的replace()方法查找字符示例代码
2013/10/28 Javascript
jQuery的one()方法用法实例
2015/01/19 Javascript
jQuery实现给页面换肤的方法
2015/05/30 Javascript
JS中的hasOwnProperty()、propertyIsEnumerable()和isPrototypeOf()
2016/08/11 Javascript
jQuery EasyUI Panel面板组件使用详解
2017/02/28 Javascript
JS实现给json数组动态赋值的方法示例
2020/03/19 Javascript
jquery插件canvaspercent.js实现百分比圆饼效果
2017/07/18 jQuery
Linux Centos7.2下安装nodejs&amp;npm配置全局路径的教程
2018/05/15 NodeJs
webpack的CSS加载器的使用
2018/09/11 Javascript
对angular 监控数据模型变化的事件方法$watch详解
2018/10/09 Javascript
JS算法教程之字符串去重与字符串反转
2020/12/15 Javascript
基于JavaScript实现简单的轮播图
2021/03/03 Javascript
[03:20]2015国际邀请赛全明星表演赛
2015/08/08 DOTA
Python的组合模式与责任链模式编程示例
2016/02/02 Python
深入理解NumPy简明教程---数组3(组合)
2016/12/17 Python
python计算auc指标实例
2017/07/13 Python
python按时间排序目录下的文件实现方法
2018/10/17 Python
python logging模块书写日志以及日志分割详解
2019/07/22 Python
Python-Flask:动态创建表的示例详解
2019/11/22 Python
Python selenium文件上传下载功能代码实例
2020/04/13 Python
Python中常用的os操作汇总
2020/11/05 Python
LocalStorage记住用户和密码功能
2017/07/24 HTML / CSS
文明青少年标兵事迹材料
2014/01/28 职场文书
入党推优材料
2014/06/02 职场文书
2014年医院十一国庆节活动方案
2014/09/15 职场文书
大学生党员个人对照检查材料范文
2014/09/25 职场文书
2015年五一劳动节慰问信
2015/03/23 职场文书
李强为自己工作观后感
2015/06/11 职场文书
2016应届大学生自荐信模板
2016/01/28 职场文书
学术会议开幕词
2016/03/03 职场文书