python 素因子分解
在使用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 素因子分解的更多相关文章
- Python核心编程--学习笔记--8--条件与循环
本章讲述if.while.for以及与他们搭配的else.elif.break.continue.pass等语句. 1 if语句 语法:三部分——关键字if.条件表达式.代码块.(记住冒号) if c ...
- 《python核心编程第二版》第8章习题
8–1. 条件语句. 请看下边的代码 # statement Aif x > 0:# statement Bpasselif x < 0:# statement Cpasselse:# s ...
- Python中的多进程与多线程(一)
一.背景 最近在Azkaban的测试工作中,需要在测试环境下模拟线上的调度场景进行稳定性测试.故而重操python旧业,通过python编写脚本来构造类似线上的调度场景.在脚本编写过程中,碰到这样一个 ...
- Python高手之路【六】python基础之字符串格式化
Python的字符串格式化有两种方式: 百分号方式.format方式 百分号的方式相对来说比较老,而format方式则是比较先进的方式,企图替换古老的方式,目前两者并存.[PEP-3101] This ...
- Python 小而美的函数
python提供了一些有趣且实用的函数,如any all zip,这些函数能够大幅简化我们得代码,可以更优雅的处理可迭代的对象,同时使用的时候也得注意一些情况 any any(iterable) ...
- JavaScript之父Brendan Eich,Clojure 创建者Rich Hickey,Python创建者Van Rossum等编程大牛对程序员的职业建议
软件开发是现时很火的职业.据美国劳动局发布的一项统计数据显示,从2014年至2024年,美国就业市场对开发人员的需求量将增长17%,而这个增长率比起所有职业的平均需求量高出了7%.很多人年轻人会选择编 ...
- 可爱的豆子——使用Beans思想让Python代码更易维护
title: 可爱的豆子--使用Beans思想让Python代码更易维护 toc: false comments: true date: 2016-06-19 21:43:33 tags: [Pyth ...
- 使用Python保存屏幕截图(不使用PIL)
起因 在极客学院讲授<使用Python编写远程控制程序>的课程中,涉及到查看被控制电脑屏幕截图的功能. 如果使用PIL,这个需求只需要三行代码: from PIL import Image ...
- Python编码记录
字节流和字符串 当使用Python定义一个字符串时,实际会存储一个字节串: "abc"--[97][98][99] python2.x默认会把所有的字符串当做ASCII码来对待,但 ...
随机推荐
- Maven仓库-Nexus环境搭建及简单介绍
1. 环境搭建 1.1 下载 http://www.sonatype.org/nexus/ NEXUS OSS [OSS = Open Source Software,开源软件——免费] NE ...
- 《天书夜读:从汇编语言到windows内核编程》八 文件操作与注册表操作
1)Windows运用程序的文件与注册表操作进入R0层之后,都有对应的内核函数实现.在windows内核中,无论打开的是文件.注册表或者设备,都需要使用InitializeObjectAttribut ...
- Linux命令kill和signal
Linux命令kill和signal kill命令用于终止指定的进程(terminate a process),是Unix/Linux下进程管理的常用命令.通常,我们在需要终止某个或某些进程时,先使用 ...
- Ajax-javascript
一.Web 2.0的特点 提到Ajax不得不提到WEB2.0 1.用户贡献内容 2.内容聚合RSS 3.更丰富的"用户体验" 二.Ajax的作用 无刷新:不刷新整个页面,只刷新局部 ...
- Struts2-045验证脚本
#! /usr/bin/env python # encoding:utf-8 import urllib2 import sys from poster.encode import multipar ...
- tab面板,html+css
<!doctype html> <html> <head> <meta charset="utf-8"> <title> ...
- 《java.util.concurrent 包源码阅读》28 Phaser 第二部分
这一部分来分析Phaser关于线程等待的实现.所谓线程等待Phaser的当前phase结束并转到下一个phase的过程.Phaser提供了三个方法: // 不可中断,没有超时的版本 public in ...
- 杭电ACM——自我强化步骤
第一阶段:开始入门吧!(15天,53题) http://blog.csdn.net/always2015/article/details/44966019#t0 一.输入输出练习(2天,10题) 10 ...
- 使用sklearn进行数据挖掘-房价预测(3)—绘制数据的分布
使用sklearn进行数据挖掘系列文章: 1.使用sklearn进行数据挖掘-房价预测(1) 2.使用sklearn进行数据挖掘-房价预测(2)-划分测试集 3.使用sklearn进行数据挖掘-房价预 ...
- android扫描网页二维码进行网页登录
转载请标明出处: http://www.cnblogs.com/dingxiansen/: 本文出自:丁先森-博客园 周六和朋友去网吧开黑,开机打开TGP,朋友那边开始输入账号密码,我看了他一眼low ...