Python练习题 010:分解质因数
【Python练习题 010】将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。
---------------------------------------------------------------
蛮以为这又是道送分题,结果费了我1个半小时才解出来!
一开始我简单地以为,只要将输入的整数拿个数字列表挨个除一遍,能整除的就可以收为质因数。但事实上是行不通的,因为这样会连同 4、6、9 这样的数字也收进去,而当质因数有重复时(比如12=2*2*3),就会被遗漏掉。
基于以上的考虑,转换思路:还是将输入的整数(n)拿个数字列表挨个除,但要多除几遍,而且每遍除的时候,一旦出现质因数,立即把这个数字收了,把输入的数字除以这个质因数并重新赋值给n,然后停止这个循环,进入下一个循环。如此便能解决上述的问题。
最后还有一点需要注意的:如果这个数字已被任意质因数整除过,那么走完所有循环之后,最后的 n 也必然是其中的一个质因数,应该把它一并收进列表里。
代码如下:
n = num = int(input('请输入一个数字:'))  #用num保留初始值
f = []  #存放质因数的列表
for j in range(int(num/2)+1):  #判断次数仅需该数字的一半多1次
    for i in range(2, n):
        t = n % i  #i不能是n本身
        if t == 0:  #若能整除
            f.append(i)  #则表示i是质因数
            n = n//i  #除以质因数后的n重新进入判断,注意应用两个除号,使n保持整数
            break  #找到1个质因数后马上break,防止非质数却可以整除的数字进入质因数列表
if len(f) == 0:  #若一个质因数也没有
    print('该数字没有任何质因数。')
else:  #若至少有一个质因数
    f.append(n)  #此时n已被某个质因数整除过,最后一个n也是其中一个质因数
    f.sort()  #排下序
    print('%d=%d' % (num, f[0]), end='')
    for i in range(1,len(f)):
        print('*%d' % f[i], end='')
输出结果如下:
请输入一个数字:1482
1482=2*3*13*19
分解质因数算是比较基础的数学问题,应该有很成熟的解法。待我好好研究下别人的算法,再来做更新。
++++++++++++++++++++++++++++++++++++++
Python练习题 010:分解质因数的更多相关文章
- 初识python: 递归函数 - 分解质因数
		分解质因数: 任何一个合数都可以写成几个质数相乘的形式.其中每个质数都是这个合数的因数,叫做这个合数的分解质因数.分解质因数只针对合数. 比如: 8 分解质因数是:2*2*2 10分解质因数是:2*5 ... 
- python练习笔记——分解质因数
		分解质因数:输入一个正整数,分解质因数:如输入: 90 则打印: 90 = 2 * 3 * 3 * 5 get_str = input("请输入一个100以内的正整数,以分解质因数:&q ... 
- python基础练习题(题目 将一个整数分解质因数。例如:输入90,打印出90=2*3*3*5)
		day9 --------------------------------------------------------------- 实例014:分解质因数 题目 将一个整数分解质因数.例如:输入 ... 
- python分解质因数
		将一个正整数分解质因数.例如:输入90,打印出90=2*3*3*5. # !/usr/bin/env python # -*- coding:utf-8 -*- # Author:Hiuhung Wa ... 
- 【Python】【demo实验17】【练习实例】【将一个正整数分解质因数】
		题目:将一个正整数分解质因数.例如:输入90,打印出90=2*3*3*5. 我的源代码: #!/usr/bin/python # encoding=utf-8 # -*- coding: UTF-8 ... 
- 【python】将一个正整数分解质因数
		def reduceNum(n): '''题目:将一个正整数分解质因数.例如:输入90,打印出90=2*3*3*5''' print '{} = '.format(n), : print 'Pleas ... 
- C# 练习题 将一个正整数分解质因数
		题目:将一个正整数分解质因数.例如:输入90,打印出90=2*3*3*5.程序分析:对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成:(1)如果这个质数恰等于n,则说明分解质因数的过程 ... 
- JAVA 基础编程练习题4 【程序 4 分解质因数】
		4 [程序 4 分解质因数] 题目:将一个正整数分解质因数.例如:输入 90,打印出 90=2*3*3*5. 程序分析:对 n 进行分解质因数,应先找到一个最小的质数 k,然后按下述步骤完成: (1) ... 
- Python练习题2
		如果真的想学精,学什么都不是好学的,如果真的想把Python学的出神入化,几乎自己想做什么都可以,就要下定恒心,坚持下去. 接下来继续更新Python练习题2,通过更新前一部的练习题让自己也学到了不少 ... 
随机推荐
- 百度与谷歌seo优化的差别
			http://www.wocaoseo.com/thread-126-1-1.html 常有朋友问谷歌(google)和百度(baidu)到底有什么区别?我在纠结这个问题该如何回答.如果从公平公正的角 ... 
- 关于华为服务器 双路E52620安装系统时遇到的问题
			一 准备好u盘启动盘,centos7的,用UltraISO制作启动盘 双击图标 进入 点击启动下的刻录磁盘映像 几分钟之后制作完场 二 :按装centos7的系统 1 首先将 u盘插到服务器上 2 ... 
- linux字符终端(控制台)的字体更改
			查看已安装的终端字体 ls /usr/share/consolefonts/ 设置终端字体 sudo dpkg-reconfigure console-setup 或者 sudo vim /etc/d ... 
- CRMEB小程序商城v4.0二次开发对接集成阿里云短信
			作者:廖飞 - CRMEB小程序商城研发项目组长 前言 cremb小程序商城v4.0版本支持短信平台为云信,但有部分用户有需求对接阿里云短信,这篇文章将对阿里云短信平台如何对接方以及对接流程详细说明. ... 
- Mysql宽字节注入 ---学习笔记
			转自:https://blog.csdn.net/niexinming/article/details/49109683 先补充一点背景:大 家都知道PHP在开启magic_quotes_gpc或者使 ... 
- Web最最基础2
			网页元素HTML 列表 (1)无序列表 <ul> <li>****</li> <li>***</li></ul> 更多样式:&l ... 
- C++11的decltype关键字
			C++11的decltype关键字 概述 decltype关键字和auto有异曲同工之处 有时我们希望从表达式的类型推断出要定义的变量类型,但是不想用该表达式的值初始化变量(如果要初始化就用auto了 ... 
- SQL Node 1.05版
			输出: select a.f1, b.f2 from table01 a, ( select a from tb ) b where a.f1=1 and b.f2=2 or b.f3=3 order ... 
- 取得min和max之间包括端点的随机整数
			产生随机数的函数用处不少,写一个放博客里备用,函数如下: /** * get a random integer between min and max * @param min * @param ma ... 
- leetcode刷题-79单词搜索
			题目 给定一个二维网格和一个单词,找出该单词是否存在于网格中. 单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格.同一个单元格内的字母不允许被重复 ... 
