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 相关文章推荐
在IIS服务器上以CGI方式运行Python脚本的教程
Apr 25 Python
Python 内置函数complex详解
Oct 23 Python
答题辅助python代码实现
Jan 16 Python
spark: RDD与DataFrame之间的相互转换方法
Jun 07 Python
python实现人民币大写转换
Jun 20 Python
pytorch numpy list类型之间的相互转换实例
Aug 18 Python
Python使用Turtle库绘制一棵西兰花
Nov 23 Python
opencv-python 提取sift特征并匹配的实例
Dec 09 Python
Pytorch的mean和std调查实例
Jan 02 Python
win10下opencv-python特定版本手动安装与pip自动安装教程
Mar 05 Python
PyQt5-QDateEdit的简单使用操作
Jul 12 Python
Python数据类型最全知识总结
May 31 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.ini中的php-5.2.0配置指令详解
2008/03/27 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(十三)
2014/06/26 PHP
ThinkPHP中的三大自动简介
2014/08/22 PHP
php实现的发送带附件邮件类实例
2014/09/22 PHP
PHP使用缓存即时输出内容(output buffering)的方法
2015/08/03 PHP
PHP常见的6个错误提示及解决方法
2016/07/07 PHP
PHP开发API接口签名生成及验证操作示例
2020/05/27 PHP
JQuery之拖拽插件实现代码
2011/04/14 Javascript
node.js中的http.response.getHeader方法使用说明
2014/12/14 Javascript
浅谈JavaScript中的String对象常用方法
2015/02/25 Javascript
jQuery编程中的一些核心方法简介
2015/08/14 Javascript
JS获取鼠标选中的文字
2016/08/10 Javascript
JavaScript学习笔记整理_setTimeout的应用
2016/09/19 Javascript
用iframe实现不刷新整个页面上传图片的实例
2016/11/18 Javascript
巧用数组制作图片切换js代码
2016/11/29 Javascript
教大家轻松制作Bootstrap漂亮表格(table)
2016/12/13 Javascript
深入理解AngularJS中的ng-bind-html指令
2017/03/27 Javascript
vue2利用Bus.js如何实现非父子组件通信详解
2017/08/25 Javascript
用react-redux实现react组件之间数据共享的方法
2018/06/08 Javascript
create-react-app使用antd按需加载的样式无效问题的解决
2019/02/26 Javascript
vue微信分享插件使用方法详解
2020/02/18 Javascript
在Python中通过threading模块定义和调用线程的方法
2016/07/12 Python
python 根据正则表达式提取指定的内容实例详解
2016/12/04 Python
PyQt5利用QPainter绘制各种图形的实例
2017/10/19 Python
基于python实现的百度音乐下载器python pyqt改进版(附代码)
2019/08/05 Python
python制作朋友圈九宫格图片
2019/11/03 Python
spyder 在控制台(console)执行python文件,debug python程序方式
2020/04/20 Python
德国在线订购鲜花:Fleurop
2018/08/25 全球购物
优秀导游先进事迹材料
2014/01/25 职场文书
六年级数学教学反思
2014/02/03 职场文书
优秀的导游求职信范文
2014/04/06 职场文书
大学课外活动总结
2014/07/09 职场文书
2015年机关纠风工作总结
2015/05/15 职场文书
刑事案件上诉状
2015/05/23 职场文书
python3实现常见的排序算法(示例代码)
2021/07/04 Python
Promise静态四兄弟实现示例详解
2022/07/07 Javascript