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操作MySQL简单实现方法
Jan 26 Python
举例详解Python中threading模块的几个常用方法
Jun 18 Python
使用Python求解最大公约数的实现方法
Aug 20 Python
Django入门使用示例
Dec 12 Python
python+ffmpeg视频并发直播压力测试
Mar 06 Python
15行Python代码带你轻松理解令牌桶算法
Mar 21 Python
python3+PyQt5自定义视图详解
Apr 24 Python
Python实现的在特定目录下导入模块功能分析
Feb 11 Python
python使用phoenixdb操作hbase的方法示例
Feb 28 Python
python集合是否可变总结
Jun 20 Python
OpenCV+python实现实时目标检测功能
Jun 24 Python
详解Open Folder as PyCharm Project怎么添加的方法
Dec 29 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字符转义相关函数小结(php下的转义字符串)
2007/04/12 PHP
PHP高自定义性安全验证码代码
2011/11/27 PHP
9段PHP实用功能的代码推荐
2014/10/14 PHP
微信公众平台网页授权获取用户基本信息中授权回调域名设置的变动
2014/10/21 PHP
php开发微信支付获取用户地址
2015/10/04 PHP
浅谈mysql_query()函数的返回值问题
2016/09/05 PHP
php使用PDO事务配合表格读取大量数据插入操作实现方法
2017/02/16 PHP
Yii框架实现多数据库配置和操作的方法
2017/05/25 PHP
PHP 文件写入和读取操作实例详解【必看篇】
2019/11/04 PHP
JS模拟的QQ面板上的多级可展开的菜单
2009/10/10 Javascript
jQuery中与toggleClass等价的程序段 以及未来学习的方向
2010/03/18 Javascript
离开页面时检测表单元素是否被修改,提示保存的js代码
2010/08/25 Javascript
Ajax搜索结果页面下方的分页按钮的生成
2012/04/05 Javascript
Knockoutjs的环境搭建教程
2012/11/26 Javascript
js数组如何添加json数据及js数组与json的区别
2015/10/27 Javascript
JavaScript入门教程之引用类型
2016/05/04 Javascript
Node.js服务器环境下使用Mock.js拦截AJAX请求的教程
2016/05/23 Javascript
js封装tab标签页实例分享
2016/12/19 Javascript
AngularJS实现网站换肤实例
2021/02/19 Javascript
vue 做移动端微信公众号采坑经验记录
2018/04/26 Javascript
Python调用命令行进度条的方法
2015/05/05 Python
matplotlib subplots 设置总图的标题方法
2018/05/25 Python
Python sorted函数详解(高级篇)
2018/09/18 Python
python求解数组中两个字符串的最小距离
2018/09/27 Python
Python后台开发Django的教程详解(启动)
2019/04/08 Python
Django框架orM与自定义SQL语句混合事务控制操作
2019/06/27 Python
推荐技术人员一款Python开源库(造数据神器)
2020/07/08 Python
css3让div随鼠标移动而抖动起来
2014/02/10 HTML / CSS
HTML5 中新的全局属性(整理)
2013/07/31 HTML / CSS
DHC美国官网:日本通信销售第一的化妆品品牌
2017/11/12 全球购物
Android笔试题总结
2014/11/29 面试题
本科毕业生自我鉴定
2013/11/02 职场文书
难忘的一课教学反思
2014/04/30 职场文书
物业保洁员岗位职责
2015/02/13 职场文书
python周期任务调度工具Schedule使用详解
2021/11/23 Python
手把手带你彻底卸载MySQL数据库
2022/06/14 MySQL