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单链表实现代码实例
Nov 21 Python
Tornado Web服务器多进程启动的2个方法
Aug 04 Python
解读Python编程中的命名空间与作用域
Oct 16 Python
Python自定义类的数组排序实现代码
Aug 28 Python
python实现txt文件格式转换为arff格式
May 31 Python
Python unittest 简单实现参数化的方法
Nov 30 Python
通过selenium抓取某东的TT购买记录并分析趋势过程解析
Aug 15 Python
python双向链表原理与实现方法详解
Dec 03 Python
pycharm激活码快速激活及使用步骤
Mar 12 Python
Python绘图之二维图与三维图详解
Aug 04 Python
记录一下scrapy中settings的一些配置小结
Sep 28 Python
Python中logging日志的四个等级和使用
Nov 17 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开发框架总结收藏
2008/04/24 PHP
ThinkPHP与PHPExcel冲突解决方法
2011/08/08 PHP
php实现监控varnish缓存服务器的状态
2014/12/30 PHP
PHP Ajax JavaScript Json获取天气信息实现代码
2016/08/17 PHP
功能强大的php文件上传类
2016/08/29 PHP
DHTML Slide Show script图片轮换
2008/03/03 Javascript
JavaScript高级程序设计 错误处理与调试学习笔记
2011/09/10 Javascript
js事件(Event)知识整理
2012/10/11 Javascript
在JavaScript中使用timer示例
2014/05/08 Javascript
NodeJS制作爬虫全过程(续)
2014/12/22 NodeJs
Node.js环境下编写爬虫爬取维基百科内容的实例分享
2016/06/12 Javascript
大型JavaScript应用程序架构设计模式
2016/06/29 Javascript
js实现的页面加载完毕之前loading提示效果完整示例【附demo源码下载】
2016/08/02 Javascript
arcgis for js 修改infowindow样式的方法
2016/11/02 Javascript
在JS中如何把毫秒转换成规定的日期时间格式实例
2017/05/11 Javascript
基于bootstrop常用类总结(推荐)
2017/09/11 Javascript
Node.js学习教程之HTTP/2服务器推送【译】
2017/10/31 Javascript
让axios发送表单请求形式的键值对post数据的实例
2018/08/11 Javascript
详解一个基于react+webpack的多页面应用配置
2019/01/21 Javascript
pytorch + visdom 处理简单分类问题的示例
2018/06/04 Python
解决python明明pip安装成功却找不到包的问题
2019/08/28 Python
使用OpenCV实现仿射变换—旋转功能
2019/08/29 Python
Python3自定义json逐层解析器代码
2020/05/11 Python
详解Python IO口多路复用
2020/06/17 Python
如何利用input事件来监听移动端的输入
2016/04/15 HTML / CSS
美国和加拿大房车出售在线分类广告:RVT.com
2018/04/23 全球购物
哥伦比亚加拿大官网:Columbia Sportswear Canada
2020/09/07 全球购物
Linux如何命名文件--使用文件名时应注意
2012/01/22 面试题
学历公证委托书
2014/04/09 职场文书
校园环保广播稿(3篇)
2014/09/15 职场文书
学校联谊协议书
2014/09/16 职场文书
党小组评议意见
2015/06/02 职场文书
关爱空巢老人感想
2015/08/11 职场文书
煤矿安全生产管理协议书
2016/03/22 职场文书
详解如何修改nginx的默认端口
2021/03/31 Servers
MySQL通过binlog恢复数据
2021/05/27 MySQL