题目:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。

我的源代码:

#!/usr/bin/python
# encoding=utf-8
# -*- coding: UTF-8 -*- # 将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。 a = int(input("please input the number:\n"))
b = a
# a 的因数集合
la = [] l = [] c = int(a*0.5)+2
print("c: ==> ",c) for i in range(2,c):
if i !=2 and i%2==0:
continue
elif i !=3 and i%3==0:
continue
elif i !=5 and i%5==0:
continue
elif i !=7 and i%7==0:
continue
elif i !=11 and i%11==0:
continue
elif i !=13 and i%13==0:
continue
elif i !=17 and i%17==0:
continue
elif i !=19 and i%19==0:
continue
elif i !=23 and i%23==0:
continue
elif i !=29 and i%29==0:
continue #print(i,"###")
if a%i==0:
la.append(i)
a = a/i
while(1):
if a%i==0:
la.append(i)
a =a/i
else:
break
if len(la) == 0:
la.append(1)
la.append(b) print(b," = ",end=" ")
for i in range(len(la)):
print(la[i],end=" ")
if i==len(la)-1:
print("\n")
else :
print(" * ",end=" ")

此代码的弊端,就是对于一个稍微大一点的数,但是其质因子都是比较小的数,处理起来太浪费时间:

所以想过,对于大一些的数的处理逻辑:

1、先建立一个数字y以内的质数表

2、优先查看这个大数所包含的质数表内的所有质因子;

3、对于质因子不在列表范围内的,再执行搜索程序;(这个比较耗时间)

优化后的代码(对于较大的数字,都能以稍快一些的时间处理完):

#!/usr/bin/python
# encoding=utf-8
# -*- coding: UTF-8 -*- # 将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。 a = int(input("please input the number:\n"))
b = a
# a 的因数集合
la = []
x = 0
#y = 1000000 #用于判断计算质数列表的最大临界
y = 300000 #用于判断计算质数列表的最大临界 if 1:
# 先构建一个质数列表:
l = []
for i in range(2,y):
k = 1
if i == 2:
l.append(i)
continue
else :
m = int(i ** 0.5) #square root
for j in range(2,m):
if i%j == 0:
k = 0;
#print(i,"is not a prime.")
break
if k == 1:
l.append(i)
#print("list: ",l) #排查这个数对应的列表内的质因子: for n in range(len(l)):
#print(n,"###")
if a%l[n]==0:
la.append(l[n])
a = a/l[n]
while(1):
if a%l[n]==0:
la.append(l[n])
a =a/l[n]
else:
break
c = 1 #c用于标记la列表的个数之积是否等于a for o in range(len(la)):
c = c * la[o]
if c == b:
x = 1 #x用于标记a这个数的质因子是否全部找到了,如果为1,表示全部找到了;x默认为0; # 第一步处理完毕;
d = int(a)
f = int(a) """
print(b," = ",end=" ")
for i in range(len(la)):
print(la[i],end=" ")
if i==len(la)-1:
print("* the new number!\n")
else :
print(" * ",end=" ")
"""
# print("==> d = ",d)
# 下一步的数据循环点;
# 只用于计算较大的质因子。 if x == 0:
e = int(d*0.5)+2
# print("==> e = ",e)
if y<e: #对于特别大的数字a;
for i in range(y,e): #我得去判断y比e大还是小啊;
print(i,"###")
if d%i==0:
la.append(i)
x = 2 #标记la列表有增加;
d = d/i
while(1):
if d%i==0:
la.append(i)
d =d/i
else:
break
else :
for i in range(2,e): #我得去判断y比e大还是小啊;
print(i,"###")
if d%i==0:
la.append(i)
x = 2 #标记la列表有增加;
d = d/i
while(1):
if d%i==0:
la.append(i)
d =d/i
else:
break
if x == 0: #表明d本身为质数,为a的质因数;
#print("2:",la,"f:",f)#
la.append(f)
#print("1:",la)# # 对于输入的数字为质数的情况;
if len(la) == 0:
la.append(1)
la.append(b)
# 这里面实际将1当做质数了,如果默认1不为质数,那么可以输出:a是质数;无质因子; print(b," = ",end=" ")
for i in range(len(la)):
print(la[i],end=" ")
if i==len(la)-1:
print("\n")
else :
print(" * ",end=" ")

处理结果:

原题给出的解答:

————————(我是分割线)————————

参考:

1. RUNOOB.COM:https://www.runoob.com/python/python-exercise-example14.html

备注:

初次编辑时间:2019年9月29日19:14:24

环境:Windows 7   / Python 3.7.2

【Python】【demo实验17】【练习实例】【将一个正整数分解质因数】的更多相关文章

  1. 【python】将一个正整数分解质因数

    def reduceNum(n): '''题目:将一个正整数分解质因数.例如:输入90,打印出90=2*3*3*5''' print '{} = '.format(n), : print 'Pleas ...

  2. C# 练习题 将一个正整数分解质因数

    题目:将一个正整数分解质因数.例如:输入90,打印出90=2*3*3*5.程序分析:对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成:(1)如果这个质数恰等于n,则说明分解质因数的过程 ...

  3. 利用matlab实现以下功能:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。

    程序思路: 对n进行分解质因数,应先找到一个最小的质数k,从2开始,然后按下述步骤完成: (1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可. (2)如果n不等于k,则应打印出k的 ...

  4. java将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。

    首先我们的算法是:例如 输入的是 90 1.找到90的最小公约数(1除外)是 2 2.然后把公约数 2 输出 3.接着用 90 / 2 = 45 (如果这里是素数,就结束,否则继续找最小公约数) 4. ...

  5. 【Python3练习题 010】将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。

    #参考http://www.cnblogs.com/iderek/p/5959318.html n = num = int(input('请输入一个数字:'))  #用num保留初始值 f = []  ...

  6. python基础练习题(题目 将一个整数分解质因数。例如:输入90,打印出90=2*3*3*5)

    day9 --------------------------------------------------------------- 实例014:分解质因数 题目 将一个整数分解质因数.例如:输入 ...

  7. 将一个正整数分解为m个2的n次方的和

    -- ============================================= -- Author:      <maco_wang> -- Create date: & ...

  8. python分解质因数

    将一个正整数分解质因数.例如:输入90,打印出90=2*3*3*5. # !/usr/bin/env python # -*- coding:utf-8 -*- # Author:Hiuhung Wa ...

  9. Python练习题 010:分解质因数

    [Python练习题 010]将一个正整数分解质因数.例如:输入90,打印出90=2*3*3*5. -------------------------------------------------- ...

随机推荐

  1. linux虚拟机安装centos6.x

    安装系统,作为每一个it技术控们的基本功,对于各位大神和技术大牛们应该是易如反掌或者是家常便饭啦,都是从无数次安装,重装,刷机中一步步走来的.那么今天,我也分享一套装机教程,共各位和我一样的小白参考或 ...

  2. 2016多校7.14 Warmup 题解

    先讲1007,是一个数位dp,询问一个区间内,各位数的和是一个素数的数字的个数.其实我并不会数位dp,这题直接套用了上次多校lyf队长的dp代码,改了点返回参数没想到直接AC了.代码如下: #incl ...

  3. msyql笔记

    CREATE TABLE class ( cid int(11) NOT NULL AUTO_INCREMENT, caption varchar(32) NOT NULL, PRIMARY KEY ...

  4. Mysql数据表字段扩充的小技巧

    在开发中,往往需求变更比开发速度要快,就会存在一些问题,比如突然要增加一个字段,我们需要 alter table 表名 add [column] 字段名 数据类型 [列属性] [位置]; 然后修改实体 ...

  5. POJ 2488 -- A Knight's Journey(骑士游历)

    POJ 2488 -- A Knight's Journey(骑士游历) 题意: 给出一个国际棋盘的大小,判断马能否不重复的走过所有格,并记录下其中按字典序排列的第一种路径. 经典的“骑士游历”问题 ...

  6. 用key管理可复用元素

    先看看不用key管理可复用元素的代码.Vue 会尽可能高效地渲染元素,通常会复用已有元素而不是从头开始渲染.这么做,除了使 Vue 变得非常快之外,还有一些有用的好处,那就是在切换input时不会清楚 ...

  7. lsnrctl: .... cannot restore segment prot after reloc: Permission denied

    cannot restore segment prot after reloc: Permission denied Table of Contents 1. 错误信息 2. 解决方法 1 错误信息 ...

  8. 使用Jsp +Js + Jquery + EasyUI + Servlet + Lucene,完成分页

    步一:创建ArticleDao.java类 public class ArticleDao { public Integer getAllObjectNum(String keywords) thro ...

  9. CSS 背景色变化 结构化伪类的练习

    CSS3的nth-child() 选择器(兼容性不好),在做表格偶数行变色的时候,我通常在绑定的时候,做一个js判断,来加一个css,从而使表格偶数行和奇数行颜色不一样.这样的兼容性很好. 但是最近在 ...

  10. 8and9 pod控制器

    Pod控制器: 自主定义的pod资源删除后不会被重启,被Pod控制器管理的pod资源被删除后会重启. pod控制器的种类: ReplicationController: (最早使用,现在已经被废弃,太 ...