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常用内置函数总结
Feb 08 Python
Django中的CACHE_BACKEND参数和站点级Cache设置
Jul 23 Python
Python编程之列表操作实例详解【创建、使用、更新、删除】
Jul 22 Python
python发送邮件脚本
May 22 Python
详解Python 调用C# dll库最简方法
Jun 20 Python
python卸载后再次安装遇到的问题解决
Jul 10 Python
python反转列表的三种方式解析
Nov 08 Python
使用Python的networkx绘制精美网络图教程
Nov 21 Python
将matplotlib绘图嵌入pyqt的方法示例
Jan 08 Python
Python序列化与反序列化相关知识总结
Jun 08 Python
用Python实现屏幕截图详解
Jan 22 Python
PYTHON基于Pyecharts绘制常见的直角坐标系图表
Apr 28 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 静态变量的初始化
2009/11/15 PHP
详解关于php的xdebug配置(编辑器vscode)
2019/01/29 PHP
TP5(thinkPHP框架)实现后台清除缓存功能示例
2019/05/29 PHP
php接口隔离原则实例分析
2019/11/11 PHP
javascript call和apply方法
2008/11/24 Javascript
半角全角相互转换的js函数
2009/10/16 Javascript
window resize和scroll事件的基本优化思路
2014/04/29 Javascript
快速学习jQuery插件 Form表单插件使用方法
2015/12/01 Javascript
4种JavaScript实现简单tab选项卡切换的方法
2016/01/06 Javascript
第七章之菜单按钮图标组件
2016/04/25 Javascript
JS代码随机生成姓名、手机号、身份证号、银行卡号
2016/04/27 Javascript
AngularJS 输入验证详解及实例代码
2016/07/28 Javascript
Vue 2.0 服务端渲染入门介绍
2017/03/29 Javascript
jQuery实现弹窗下底部页面禁止滑动效果
2017/12/19 jQuery
JavaScript设计模式之单例模式简单实例教程
2018/07/02 Javascript
jquery插件开发模式实例详解
2019/07/20 jQuery
基于JavaScript获取base64图片大小
2019/10/18 Javascript
纯JS实现五子棋游戏
2020/05/28 Javascript
javascript实现多边形碰撞检测
2020/10/24 Javascript
详解如何在vue+element-ui的项目中封装dialog组件
2020/12/11 Vue.js
[03:43]2014DOTA2西雅图国际邀请赛 newbee战队巡礼
2014/07/07 DOTA
python进阶教程之模块(module)介绍
2014/08/30 Python
编写Python脚本批量下载DesktopNexus壁纸的教程
2015/05/06 Python
Python安装图文教程 Pycharm安装教程
2018/03/27 Python
使用DataFrame删除行和列的实例讲解
2018/04/08 Python
python实现寻找最长回文子序列的方法
2018/06/02 Python
django中ORM模型常用的字段的使用方法
2019/03/05 Python
tensorflow实现残差网络方式(mnist数据集)
2020/05/26 Python
Django中的模型类设计及展示示例详解
2020/05/29 Python
您的时尚,您的生活方式:DTLR Villa
2019/12/25 全球购物
中文系师范生自荐信
2013/10/01 职场文书
安全生产责任书范本
2014/04/15 职场文书
群众路线剖析材料范文
2014/10/09 职场文书
2016年植树节红领巾广播稿
2015/12/17 职场文书
Python加密技术之RSA加密解密的实现
2022/04/08 Python
详解SQL报错盲注
2022/07/23 SQL Server