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 相关文章推荐
Python3.x版本中新的字符串格式化方法
Apr 24 Python
Python利用前序和中序遍历结果重建二叉树的方法
Apr 27 Python
Python 正则表达式入门(中级篇)
Dec 07 Python
python的多重继承的理解
Aug 06 Python
python实现聊天小程序
Mar 13 Python
python3.6使用pymysql连接Mysql数据库
May 25 Python
详解Django+Uwsgi+Nginx 实现生产环境部署
Nov 06 Python
python 读取竖线分隔符的文本方法
Dec 20 Python
python 默认参数相关知识详解
Sep 18 Python
Python基础类继承重写实现原理解析
Apr 03 Python
python os模块在系统管理中的应用
Jun 22 Python
python 实现非极大值抑制算法(Non-maximum suppression, NMS)
Oct 15 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+jQuery 注册模块的改进(一):验证码存入SESSION
2014/10/14 PHP
PHP 二维数组和三维数组的过滤
2016/03/16 PHP
php lcg_value与mt_rand生成0~1随机小数的效果对比分析
2017/04/05 PHP
Laravel中任务调度console使用方法小结
2017/05/07 PHP
PHP观察者模式原理与简单实现方法示例
2017/08/25 PHP
Yii2框架操作数据库的方法分析【以mysql为例】
2019/05/27 PHP
tp5(thinkPHP5框架)时间查询操作实例分析
2019/05/29 PHP
PHP命名空间(namespace)原理与用法详解
2019/12/11 PHP
一个加载js文件的小脚本
2007/06/28 Javascript
jquery 图片预加载 自动等比例缩放插件
2008/12/25 Javascript
用jQuery扩展自写的 UI导航
2010/01/13 Javascript
js下关于onmouseout、事件冒泡的问题经验小结
2010/12/09 Javascript
eval与window.eval的差别分析
2011/03/17 Javascript
javascript常用的设计模式
2017/02/09 Javascript
web前端vue filter 过滤器
2018/01/12 Javascript
移动web开发之touch事件实例详解
2018/01/17 Javascript
实战node静态文件服务器的示例代码
2018/03/08 Javascript
JavaScript同源策略和跨域访问实例详解
2018/04/03 Javascript
微信小程序常见页面跳转操作简单示例
2019/05/01 Javascript
小程序实现背景音乐播放和暂停
2020/06/19 Javascript
[03:06]2018年度CS GO最具人气解说-完美盛典
2018/12/16 DOTA
Python中的tuple元组详细介绍
2015/02/02 Python
Python利用前序和中序遍历结果重建二叉树的方法
2016/04/27 Python
Python之指数与E记法的区别详解
2019/11/21 Python
哪些是python中web开发框架
2020/06/17 Python
HTML5拖放效果的实现代码
2016/11/17 HTML / CSS
巴黎欧莱雅法国官网:L’Oreal Paris
2019/04/30 全球购物
军用级手机壳,专为冒险而建:Zizo Wireless
2019/08/07 全球购物
出口公司经理求职简历中的自我评价
2013/10/13 职场文书
酒店个人求职信范文
2014/01/25 职场文书
金融事务专业求职信
2014/04/25 职场文书
3分钟演讲稿
2014/04/30 职场文书
Sql-Server数据库单表查询 4.3实验课
2021/04/05 SQL Server
Pytorch中TensorBoard及torchsummary的使用详解
2021/05/12 Python
面试被问select......for update会锁表还是锁行
2021/11/11 MySQL
Python Pygame实战之塔防游戏的实现
2022/03/17 Python