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里大整数相乘相关技巧指南
Sep 12 Python
Python验证码识别处理实例
Dec 28 Python
Django自定义分页与bootstrap分页结合
Feb 22 Python
Python基于OpenCV实现视频的人脸检测
Jan 23 Python
Python使用ctypes调用C/C++的方法
Jan 29 Python
Win10 安装PyCharm2019.1.1(图文教程)
Sep 29 Python
python图的深度优先和广度优先算法实例分析
Oct 26 Python
python3中rank函数的用法
Nov 27 Python
Python常用模块sys,os,time,random功能与用法实例分析
Jan 07 Python
Python如何基于Tesseract实现识别文字功能
Jun 05 Python
python中关于数据类型的学习笔记
Jul 19 Python
python中print格式化输出的问题
Apr 16 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字符串的比较函数strcmp()与strcasecmp()的使用详解
2013/05/15 PHP
五款PHP代码重构工具推荐
2014/10/14 PHP
PHP自动生成表单代码分享
2015/06/19 PHP
PHP strip_tags() 去字符串中的 HTML、XML 以及 PHP 标签的函数
2016/05/22 PHP
ExtJS 2.0实用简明教程 之Ext类库简介
2009/04/29 Javascript
JSQL SQLProxy 的 php 版本代码
2010/05/05 Javascript
UpdatePanel和Jquery冲突的解决方法
2013/04/01 Javascript
JS实现的3D拖拽翻页效果代码
2015/10/31 Javascript
JS中Json数据的处理和解析JSON数据的方法详解
2016/06/29 Javascript
很棒的js选项卡切换效果
2016/07/15 Javascript
BootStrap中关于Select下拉框选择触发事件及扩展
2016/11/22 Javascript
JQuery和PHP结合实现动态进度条上传显示
2016/11/23 Javascript
JS正则表达式之非捕获分组用法实例分析
2016/12/28 Javascript
JavaScript中String对象的方法介绍
2017/01/04 Javascript
JavaScript 用fetch 实现异步下载文件功能
2017/07/21 Javascript
微信小程序wx.getImageInfo()如何获取图片信息
2018/01/26 Javascript
Vue Element校验validate的实例
2020/09/21 Javascript
Javascript新手入门之字符串拼接与变量的应用
2020/12/03 Javascript
python中MySQLdb模块用法实例
2014/11/10 Python
Python 模拟员工信息数据库操作的实例
2017/10/23 Python
使用python实现快速搭建简易的FTP服务器
2018/09/12 Python
python 制作自定义包并安装到系统目录的方法
2018/10/27 Python
利用PyCharm Profile分析异步爬虫效率详解
2019/05/08 Python
Pycharm最新激活码2019(推荐)
2019/12/31 Python
浅谈Django QuerySet对象(模型.objects)的常用方法
2020/03/28 Python
Pycharm配置PyQt5环境的教程
2020/04/02 Python
django admin 根据choice字段选择的不同来显示不同的页面方式
2020/05/13 Python
解决导入django_filters不成功问题No module named 'django_filter'
2020/07/15 Python
CSS3按钮鼠标悬浮实现光圈效果源码
2016/09/11 HTML / CSS
英国汽车座椅和婴儿车购物网站:Uber Kids
2017/04/19 全球购物
用Python写一个for循环的例子
2016/07/19 面试题
喝酒检查书范文
2014/02/23 职场文书
工作时间擅自离岗检讨书
2014/10/24 职场文书
安全先进班组材料
2014/12/26 职场文书
关于元旦的广播稿2016
2015/12/17 职场文书
Python代码实现双链表
2022/05/25 Python