在使用python解决问题之前,我们先说一下,什么是素因子分解

所谓素因子分解就是,先找这个数的所有约数(约数即:a%b == 0,也就是a可以被b整除)

例如:20的约数集合为 [1, 2, 5, 10, 20]

那么素因子分解呢?

就是从最小的素数约数开始除,也就是这个除数要满足两个条件,一是约数,二是素数

那么这里20的最小的素约数是2,所以我们从2开始除,并且一直除到不能被整出为止:

num = 20

num = num / 2

num = 10(这里num依旧可以被2整除,所以再来一次)

num = num / 2

num = 5 (num很明显除以2不能整除)

所以接下来被除数需要向后走,即5(再取下一个数为除数之前,要先判断是否为素数,这里5为素数,如果不是素数比如4则需要继续向后取)

num = num / 5

num = 1

至此,运算结束。所以,我们得到20的素因子集合为:[2, 2, 5]

那么接下来就是使用python实现的部分了

通过之前的解析过程,我们可以看到我们需要这么两个小模块:

1. 判断数字是否是素数,如果数字本身是素数,那么直接返回1和它本身就可以了,因为素数不能被分解了,即 [1, num]

2. 我们需要获得这个数的所有约数,以便于我们进行作除法

下面是这两个部分的实现:

 # 判断是否是素数
def isprime(num):
count = num / 2
while count > 1:
if num % count == 0:
return False
count -= 1
else:
return True
 # 得到所有的约数
def getfactors(num):
return [x for x in range(1, num) if num % x == 0]

通过上面两个部分,我们就可以得到所有的基础了,接下来就是运算了

 def primefactor(num):
if isprime(num):
return [1,num]
factors = getfactors(num)
retList = []
consult = num
for i in range(1,len(factors)):
if consult == 1:
break
while True:
if consult % factors[i] != 0:
break
if isprime(factors[i]):
consult /= factors[i]
retList.append(factors[i])
else:
break
return retList

ok,最后调用primefactor就可以得到结果了,注意返回的是个list对象哦

python 素因子分解的更多相关文章

  1. Python核心编程--学习笔记--8--条件与循环

    本章讲述if.while.for以及与他们搭配的else.elif.break.continue.pass等语句. 1 if语句 语法:三部分——关键字if.条件表达式.代码块.(记住冒号) if c ...

  2. 《python核心编程第二版》第8章习题

    8–1. 条件语句. 请看下边的代码 # statement Aif x > 0:# statement Bpasselif x < 0:# statement Cpasselse:# s ...

  3. Python中的多进程与多线程(一)

    一.背景 最近在Azkaban的测试工作中,需要在测试环境下模拟线上的调度场景进行稳定性测试.故而重操python旧业,通过python编写脚本来构造类似线上的调度场景.在脚本编写过程中,碰到这样一个 ...

  4. Python高手之路【六】python基础之字符串格式化

    Python的字符串格式化有两种方式: 百分号方式.format方式 百分号的方式相对来说比较老,而format方式则是比较先进的方式,企图替换古老的方式,目前两者并存.[PEP-3101] This ...

  5. Python 小而美的函数

    python提供了一些有趣且实用的函数,如any all zip,这些函数能够大幅简化我们得代码,可以更优雅的处理可迭代的对象,同时使用的时候也得注意一些情况   any any(iterable) ...

  6. JavaScript之父Brendan Eich,Clojure 创建者Rich Hickey,Python创建者Van Rossum等编程大牛对程序员的职业建议

    软件开发是现时很火的职业.据美国劳动局发布的一项统计数据显示,从2014年至2024年,美国就业市场对开发人员的需求量将增长17%,而这个增长率比起所有职业的平均需求量高出了7%.很多人年轻人会选择编 ...

  7. 可爱的豆子——使用Beans思想让Python代码更易维护

    title: 可爱的豆子--使用Beans思想让Python代码更易维护 toc: false comments: true date: 2016-06-19 21:43:33 tags: [Pyth ...

  8. 使用Python保存屏幕截图(不使用PIL)

    起因 在极客学院讲授<使用Python编写远程控制程序>的课程中,涉及到查看被控制电脑屏幕截图的功能. 如果使用PIL,这个需求只需要三行代码: from PIL import Image ...

  9. Python编码记录

    字节流和字符串 当使用Python定义一个字符串时,实际会存储一个字节串: "abc"--[97][98][99] python2.x默认会把所有的字符串当做ASCII码来对待,但 ...

随机推荐

  1. 一:配置使用阿里云Maven库

    鉴于国内的网络环境,从默认 Maven 库下载 jar 包是非常的痛苦. 速度慢就不说了,还经常是下不下来,然后一运行就是各种 ClassNotFoundException,然后你得找到残留文件删掉重 ...

  2. SSM :MyBatis与Spring的整合

    MyBatis与Spring的整合 一:Spring整合MyBatis的准备工作: (1.)在项目中加入Spring,ByBatis及整合相关的jar文件 (2.)建立开发目录结构,创建实体类 (3. ...

  3. 对于php-fpm和cgi,还有并发响应的理解

    参考链接: - https://www.zhihu.com/question/64414628   php fpm 进程数和并发数是什么关系? - https://segmentfault.com/q ...

  4. [转载] Java安全体系简介

    转载自http://blog.csdn.net/jbossweek/article/details/1458468 一.设计原则 独立性 安全服务独立于具体的应用,应用不需要单独实现,只需通过请求就可 ...

  5. B-树&B+树以及其在数据库中的应用

    B-树&B+树以及其在数据库中的应用 1 .B-树定义 B-树是一种平衡的多路查找树,它在文件系统中很有用. 定义:一棵m 阶的B-树,或者为空树,或为满足下列特性的m 叉树:⑴树中每个结点至 ...

  6. StackExchange.Redis学习笔记(三) 数据库及密码配置 GetServer函数

    这一章主要写一些StackExchange.Redis的配置及不太经常用到的函数 数据库连接 下面是我的连接字符串,里面指定了地址,密码,及默认的数据库 Redis启动后默认会分成0-15个数据库,不 ...

  7. Java中abstract关键字详解

    abstract只能修饰类(class) 和 方法.而不能修饰成员变量.这是由于抽象的概念确定的.只有类和方法可以抽象出来,而成员变量不需要抽象. abstract修饰类 abstract之所以出现, ...

  8. LoadRunner系统资源监视

    http://www.ltesting.net/ceshi/ceshijishu/rjcsgj/mercury/loadrunner/2013/0418/206165_3.html --------- ...

  9. 【Java】单词倒序输出

    如何将一段单词倒序输出?把"Hello Java Hello China"变成"China Hello Java Hello"? 看起来好像很简单,只需要把字符 ...

  10. SoapUI实践:自动化测试、压力测试、持续集成

    因为项目的原因,前段时间研究并使用了 SoapUI 测试工具进行自测开发的 api.下面将研究的成果展示给大家,希望对需要的人有所帮助. SoapUI 是什么? SoapUI 是一个开源测试工具,通过 ...