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 24 Python
在Python中处理时间之clock()方法的使用
May 22 Python
Python实现短网址ShortUrl的Hash运算实例讲解
Aug 10 Python
python3 kmp 字符串匹配的方法
Jul 07 Python
scrapy-redis源码分析之发送POST请求详解
May 15 Python
Python实现的远程文件自动打包并下载功能示例
Jul 12 Python
Django中提供的6种缓存方式详解
Aug 05 Python
基于python全局设置id 自动化测试元素定位过程解析
Sep 04 Python
使用Pandas的Series方法绘制图像教程
Dec 04 Python
使用pandas库对csv文件进行筛选保存
May 25 Python
Python打印不合法的文件名
Jul 31 Python
Selenium浏览器自动化如何上传文件
Apr 06 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新手上路(十二)
2006/10/09 PHP
Apache中php.ini的设置方法
2013/02/28 PHP
7个鲜为人知却非常实用的PHP函数
2015/07/01 PHP
PHPExcel实现表格导出功能示例【带有多个工作sheet】
2018/06/13 PHP
Laravel 框架基于自带的用户系统实现登录注册及错误处理功能分析
2020/04/14 PHP
laravel入门知识点整理
2020/09/15 PHP
js数据验证集合、js email验证、js url验证、js长度验证、js数字验证等简单封装
2010/05/15 Javascript
js自定义事件代码说明
2011/01/31 Javascript
判断一个对象是否为jquery对象的方法
2014/03/12 Javascript
jQuery对于显示和隐藏等常用状态的判断方法
2014/12/13 Javascript
JavaScript如何实现对数字保留两位小数一位自动补零
2015/12/18 Javascript
js与jquery分别实现tab标签页功能的方法
2016/11/18 Javascript
Nodejs搭建wss服务器教程
2017/05/24 NodeJs
JS 验证密码 不能为空,必须含有数字、字母、特殊字符,长度在8-12位
2017/06/21 Javascript
在Vue.js中使用Mixins的方法
2017/09/12 Javascript
Angular2.0/4.0 使用Echarts图表的示例代码
2017/12/07 Javascript
详解Angular2学习笔记之Html属性绑定
2018/01/03 Javascript
Vuex 入门教程
2018/01/10 Javascript
JavaScript Canvas编写炫彩的网页时钟
2019/10/16 Javascript
[01:12:27]EG vs Secret 2018国际邀请赛淘汰赛BO3 第二场 8.22
2018/08/23 DOTA
Python-基础-入门 简介
2014/08/09 Python
简单掌握Python中glob模块查找文件路径的用法
2016/07/05 Python
Python测试人员需要掌握的知识
2018/02/08 Python
python二元表达式用法
2019/12/04 Python
python sklearn包——混淆矩阵、分类报告等自动生成方式
2020/02/28 Python
Python Scrapy图片爬取原理及代码实例
2020/06/12 Python
基于django2.2连oracle11g解决版本冲突的问题
2020/07/02 Python
Selenium 安装和简单使用的实现
2020/12/04 Python
奥地利体育网上商店:Gigasport
2019/10/09 全球购物
求∏的近似值,直到最后一项的绝对值小于指定的数
2016/02/12 面试题
医院护士求职自荐信格式
2013/09/21 职场文书
食品采购员岗位职责
2014/04/14 职场文书
难忘的一课教学反思
2014/04/30 职场文书
PyQt5 显示超清高分辨率图片的方法
2021/04/11 Python
Python 机器学习工具包SKlearn的安装与使用
2021/05/14 Python
Java如何实现通过键盘输入一个数组
2022/02/15 Java/Android