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的条件语句与运算符优先级详解
Oct 13 Python
python脚本设置系统时间的两种方法
Feb 21 Python
轻松实现TensorFlow微信跳一跳的AI
Jan 05 Python
Python实现把多维数组展开成DataFrame
Nov 30 Python
python GUI库图形界面开发之PyQt5状态栏控件QStatusBar详细使用方法实例
Feb 28 Python
python实现扑克牌交互式界面发牌程序
Apr 22 Python
如何基于windows实现python定时爬虫
May 01 Python
sklearn线性逻辑回归和非线性逻辑回归的实现
Jun 09 Python
Python如何实现远程方法调用
Aug 07 Python
教你怎么用Python处理excel实现自动化办公
Apr 30 Python
Python 实现绘制子图及子图刻度的变换等问题
May 31 Python
pytorch fine-tune 预训练的模型操作
Jun 03 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
phpBB BBcode处理的漏洞
2006/10/09 PHP
无数据库的详细域名查询程序PHP版(5)
2006/10/09 PHP
Laravel框架中扩展函数、扩展自定义类的方法
2014/09/04 PHP
PHP利用MySQL保存session的实现思路及示例代码
2014/09/09 PHP
PHP生成静态HTML页面最简单方法示例
2015/04/09 PHP
PHP防止刷新重复提交页面的示例代码
2015/11/11 PHP
php字符串的替换,分割和连接方法
2016/05/23 PHP
[原创]静态页面也可以实现预览 列表不同的显示方式
2006/10/14 Javascript
js异常捕获方法介绍
2013/04/10 Javascript
javascript验证身份证完全方法具体实现
2013/11/18 Javascript
Jquery幻灯片特效代码分享--鼠标点击按钮时切换(1)
2015/08/15 Javascript
jquery实现在网页指定区域显示自定义右键菜单效果
2015/08/25 Javascript
javascript html5轻松实现拖动功能
2017/03/01 Javascript
AngularJs用户登录问题处理(交互及验证、阻止FQ处理)
2017/10/26 Javascript
Angular2管道Pipe及自定义管道格式数据用法实例分析
2017/11/29 Javascript
js经验分享 JavaScript反调试技巧
2018/03/10 Javascript
jQuery实现鼠标移到某个对象时弹出显示层功能
2018/08/23 jQuery
jquery.param()实现数组或对象的序列化方法
2018/10/08 jQuery
JS闭包经典实例详解
2018/12/20 Javascript
Python函数的周期性执行实现方法
2016/08/13 Python
python 日期操作类代码
2018/05/05 Python
使用python去除图片白色像素的实例
2019/12/12 Python
解决PyCharm IDE环境下,执行unittest不生成测试报告的问题
2020/09/03 Python
Python logging日志库空间不足问题解决
2020/09/14 Python
python 获取字典键值对的实现
2020/11/12 Python
python接口自动化框架实战
2020/12/23 Python
带有css3动画效果的兼容多浏览器简单导航条示例
2014/01/26 HTML / CSS
微信小程序“圣诞帽”的实现思路详解
2017/12/28 HTML / CSS
Original Penguin英国官方网站:美国著名休闲时装品牌
2016/10/30 全球购物
联想新西兰官方网站:Lenovo New Zealand
2018/10/30 全球购物
护士自我介绍信
2014/01/13 职场文书
爱国口号
2014/06/19 职场文书
少年雷锋观后感
2015/06/10 职场文书
Python获取百度热搜的完整代码
2021/04/07 Python
Vue.js 带下拉选项的输入框(Textbox with Dropdown)组件
2021/04/17 Vue.js
python全面解析接口返回数据
2022/02/12 Python