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实现基于权重的随机数2种方法
Apr 28 Python
Python实现压缩和解压缩ZIP文件的方法分析
Sep 28 Python
值得收藏,Python 开发中的高级技巧
Nov 23 Python
解决Python3 控制台输出InsecureRequestWarning问题
Jul 15 Python
在linux系统下安装python librtmp包的实现方法
Jul 22 Python
Python Selenium 设置元素等待的三种方式
Mar 18 Python
Python实现从N个数中找到最大的K个数
Apr 02 Python
Django 实现 Websocket 广播、点对点发送消息的代码
Jun 03 Python
Python字符串及文本模式方法详解
Sep 10 Python
python的数学算法函数及公式用法
Nov 18 Python
2020年10款优秀的Python第三方库,看看有你中意的吗?
Jan 12 Python
python中subplot大小的设置步骤
Jun 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
SONY ICF-F10中波修复记
2021/03/02 无线电
php如何执行非缓冲查询API
2016/07/22 PHP
PHP编程计算文件或数组中单词出现频率的方法
2017/05/22 PHP
laravel migrate初学常见错误的解决方法
2017/10/11 PHP
javascript中全局对象的parseInt()方法使用介绍
2013/12/19 Javascript
使用jquery实现以post打开新窗口
2014/03/19 Javascript
学习JavaScript设计模式之代理模式
2016/01/12 Javascript
Vue中fragment.js使用方法详解
2017/03/09 Javascript
canvas绘制一个常用的emoji表情
2017/03/30 Javascript
从零开始学习Node.js系列教程一:http get和post用法分析
2017/04/13 Javascript
使用Math.max,Math.min获取数组中的最值实例
2017/04/25 Javascript
基于React+Redux的SSR实现方法
2018/07/03 Javascript
JavaScript实现汉字转换为拼音及缩写的方法示例
2019/03/28 Javascript
node实现简单的增删改查接口实例代码
2019/08/22 Javascript
详解用async/await来处理异步
2019/08/28 Javascript
js实现中文实时时钟
2020/01/15 Javascript
简单讲解Python中的数字类型及基本的数学计算
2016/03/11 Python
Python 获得13位unix时间戳的方法
2017/10/20 Python
使用Python获取并处理IP的类型及格式方法
2018/11/01 Python
Python datetime和unix时间戳之间相互转换的讲解
2019/04/01 Python
python中的句柄操作的方法示例
2019/06/20 Python
Pycharm创建项目时如何自动添加头部信息
2019/11/14 Python
python 正则表达式参数替换实例详解
2020/01/17 Python
Django搭建项目实战与避坑细节详解
2020/12/06 Python
有影响力的品牌之家:Our Social Collective
2019/06/08 全球购物
英国在线购买马术服装:EQUUS
2019/07/12 全球购物
介绍一下Linux中的链接
2016/06/05 面试题
旅游专业职业生涯规划范文
2014/01/13 职场文书
仓库管理制度
2014/01/21 职场文书
高等教育专业自荐信范文
2014/03/26 职场文书
工伤事故赔偿协议书
2014/04/15 职场文书
植物生产学专业求职信
2014/08/08 职场文书
2014年合同管理工作总结
2014/12/02 职场文书
2015年大学生村官工作总结
2015/04/21 职场文书
MySQL 重写查询语句的三种策略
2021/05/10 MySQL
html,css,javascript是怎样变成页面的
2023/05/07 HTML / CSS